# riadgaffar/obd-scanner-app architecture

> Architecture diagram of the GitHub repository riadgaffar/obd-scanner-app, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/riadgaffar/obd-scanner-app
- Repository: https://github.com/riadgaffar/obd-scanner-app

## Overview

This is a cross-platform Flutter OBD-II scanner. The apparent user workflow is to open the dashboard, connect to an OBD data source, parse incoming readings, and view vehicle values through gauges. The tree identifies socket, command, parsing, state, and gauge modules, but the Dart implementations were not sampled, so their runtime wiring and exact data flow cannot be confirmed. The graph preserves those feature areas without asserting unsupported calls.

Main entry points: [`lib/main.dart`](https://github.com/riadgaffar/obd-scanner-app/blob/main/lib/main.dart) (App entry), [`lib/app.dart`](https://github.com/riadgaffar/obd-scanner-app/blob/main/lib/app.dart) (Application shell), [`lib/packages/socket_io/simple_socket.dart`](https://github.com/riadgaffar/obd-scanner-app/blob/main/lib/packages/socket_io/simple_socket.dart) (Socket client), [`lib/pages/dashboard.dart`](https://github.com/riadgaffar/obd-scanner-app/blob/main/lib/pages/dashboard.dart) (Dashboard)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Flutter app"]
  node_entry["App entry<br/>[main.dart]"]
  node_application["Application shell<br/>[app.dart]"]
end

subgraph group_connection["OBD connection"]
  node_socket_state["Socket state<br/>[socket_state.dart]"]
  node_socket_cubit["Socket controller<br/>[socket_cubit.dart]"]
  node_repository["Socket repository<br/>[repository.dart]"]
  node_socket["Socket client<br/>[simple_socket.dart]"]
  node_commands["OBD commands<br/>[obd_commands.dart]"]
  node_config["Socket configuration<br/>[socket_config.dart]"]
  node_address["IP address<br/>[ip_address.dart]"]
  node_message["OBD message<br/>[message.dart]"]
  node_parser["Payload parser"]
  node_dialogs["Connection dialogs<br/>[dialogs.dart]"]
  node_settings["Settings dialog"]
  node_errors["Error dialog<br/>[error_dialog.dart]"]
end

subgraph group_display["Readings display"]
  node_dashboard["Dashboard<br/>[dashboard.dart]"]
  node_radial["Radial gauge"]
  node_percentage["Percentage gauge"]
  node_temperature["Temperature gauge"]
  node_voltage["Voltage gauge"]
end

node_driver(("Driver"))
node_obd_source(("OBD data source"))

node_driver -->|"launches"| node_entry
node_entry -->|"starts"| node_application
node_driver -->|"views"| node_dashboard
node_obd_source -.-> node_socket

click node_entry "https://github.com/riadgaffar/obd-scanner-app/blob/main/lib/main.dart"
click node_application "https://github.com/riadgaffar/obd-scanner-app/blob/main/lib/app.dart"
click node_dashboard "https://github.com/riadgaffar/obd-scanner-app/blob/main/lib/pages/dashboard.dart"
click node_socket_state "https://github.com/riadgaffar/obd-scanner-app/blob/main/lib/packages/socket_io/cubit/socket_state.dart"
click node_socket_cubit "https://github.com/riadgaffar/obd-scanner-app/blob/main/lib/packages/socket_io/cubit/socket_cubit.dart"
click node_repository "https://github.com/riadgaffar/obd-scanner-app/blob/main/lib/packages/socket_io/repository.dart"
click node_socket "https://github.com/riadgaffar/obd-scanner-app/blob/main/lib/packages/socket_io/simple_socket.dart"
click node_commands "https://github.com/riadgaffar/obd-scanner-app/blob/main/lib/packages/socket_io/model/obd_commands.dart"
click node_config "https://github.com/riadgaffar/obd-scanner-app/blob/main/lib/packages/socket_io/model/socket_config.dart"
click node_address "https://github.com/riadgaffar/obd-scanner-app/blob/main/lib/packages/socket_io/model/ip_address.dart"
click node_message "https://github.com/riadgaffar/obd-scanner-app/blob/main/lib/packages/socket_io/model/message.dart"
click node_parser "https://github.com/riadgaffar/obd-scanner-app/blob/main/lib/packages/socket_io/utils/payload_parser.dart"
click node_radial "https://github.com/riadgaffar/obd-scanner-app/blob/main/lib/widgets/dynamic_radial_gauge.dart"
click node_percentage "https://github.com/riadgaffar/obd-scanner-app/blob/main/lib/widgets/percentage_gauge.dart"
click node_temperature "https://github.com/riadgaffar/obd-scanner-app/blob/main/lib/widgets/temperature_linear_gauge.dart"
click node_voltage "https://github.com/riadgaffar/obd-scanner-app/blob/main/lib/widgets/voltage_linear_gauge.dart"
click node_dialogs "https://github.com/riadgaffar/obd-scanner-app/blob/main/lib/packages/socket_io/widgets/dialogs/dialogs.dart"
click node_settings "https://github.com/riadgaffar/obd-scanner-app/blob/main/lib/packages/socket_io/widgets/dialogs/settings_dialog.dart"
click node_errors "https://github.com/riadgaffar/obd-scanner-app/blob/main/lib/packages/socket_io/widgets/dialogs/error_dialog.dart"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_entry,node_application toneBlue
class node_socket_state,node_socket_cubit,node_repository,node_socket,node_commands,node_config,node_address,node_message,node_parser,node_dialogs,node_settings,node_errors toneAmber
class node_dashboard,node_radial,node_percentage,node_temperature,node_voltage toneMint
class node_driver,node_obd_source toneIndigo
```

## Components

### Flutter app

- [App entry](https://github.com/riadgaffar/obd-scanner-app/blob/main/lib/main.dart): `lib/main.dart`
- [Application shell](https://github.com/riadgaffar/obd-scanner-app/blob/main/lib/app.dart): `lib/app.dart`

### OBD connection

- [Socket state](https://github.com/riadgaffar/obd-scanner-app/blob/main/lib/packages/socket_io/cubit/socket_state.dart): `lib/packages/socket_io/cubit/socket_state.dart`
- [Socket controller](https://github.com/riadgaffar/obd-scanner-app/blob/main/lib/packages/socket_io/cubit/socket_cubit.dart): `lib/packages/socket_io/cubit/socket_cubit.dart`
- [Socket repository](https://github.com/riadgaffar/obd-scanner-app/blob/main/lib/packages/socket_io/repository.dart): `lib/packages/socket_io/repository.dart`
- [Socket client](https://github.com/riadgaffar/obd-scanner-app/blob/main/lib/packages/socket_io/simple_socket.dart): `lib/packages/socket_io/simple_socket.dart`
- [OBD commands](https://github.com/riadgaffar/obd-scanner-app/blob/main/lib/packages/socket_io/model/obd_commands.dart): `lib/packages/socket_io/model/obd_commands.dart`
- [Socket configuration](https://github.com/riadgaffar/obd-scanner-app/blob/main/lib/packages/socket_io/model/socket_config.dart): `lib/packages/socket_io/model/socket_config.dart`
- [IP address](https://github.com/riadgaffar/obd-scanner-app/blob/main/lib/packages/socket_io/model/ip_address.dart): `lib/packages/socket_io/model/ip_address.dart`
- [OBD message](https://github.com/riadgaffar/obd-scanner-app/blob/main/lib/packages/socket_io/model/message.dart): `lib/packages/socket_io/model/message.dart`
- [Payload parser](https://github.com/riadgaffar/obd-scanner-app/blob/main/lib/packages/socket_io/utils/payload_parser.dart): `lib/packages/socket_io/utils/payload_parser.dart`
- [Connection dialogs](https://github.com/riadgaffar/obd-scanner-app/blob/main/lib/packages/socket_io/widgets/dialogs/dialogs.dart): `lib/packages/socket_io/widgets/dialogs/dialogs.dart`
- [Settings dialog](https://github.com/riadgaffar/obd-scanner-app/blob/main/lib/packages/socket_io/widgets/dialogs/settings_dialog.dart): `lib/packages/socket_io/widgets/dialogs/settings_dialog.dart`
- [Error dialog](https://github.com/riadgaffar/obd-scanner-app/blob/main/lib/packages/socket_io/widgets/dialogs/error_dialog.dart): `lib/packages/socket_io/widgets/dialogs/error_dialog.dart`

### Readings display

- [Dashboard](https://github.com/riadgaffar/obd-scanner-app/blob/main/lib/pages/dashboard.dart): `lib/pages/dashboard.dart`
- [Radial gauge](https://github.com/riadgaffar/obd-scanner-app/blob/main/lib/widgets/dynamic_radial_gauge.dart): `lib/widgets/dynamic_radial_gauge.dart`
- [Percentage gauge](https://github.com/riadgaffar/obd-scanner-app/blob/main/lib/widgets/percentage_gauge.dart): `lib/widgets/percentage_gauge.dart`
- [Temperature gauge](https://github.com/riadgaffar/obd-scanner-app/blob/main/lib/widgets/temperature_linear_gauge.dart): `lib/widgets/temperature_linear_gauge.dart`
- [Voltage gauge](https://github.com/riadgaffar/obd-scanner-app/blob/main/lib/widgets/voltage_linear_gauge.dart): `lib/widgets/voltage_linear_gauge.dart`

### Other components

- **Driver**
- **OBD data source**

## Connections

- Driver → App entry: launches
- App entry → Application shell: starts
- Driver → Dashboard: views
- OBD data source → Socket client
