About Page, what else? #258

Closed
opened 2026-05-25 18:43:15 +00:00 by guettli · 2 comments
guettli commented 2026-05-25 18:43:15 +00:00 (Migrated from codeberg.org)

Implement all items from below plan.

Implement all items from below plan.
guettlibot commented 2026-05-25 18:46:06 +00:00 (Migrated from codeberg.org)

Implementation Plan: Enriching the About Page

Context

The About page () currently displays a markdown table with these fields: App Version, Git Commit, Platform, OS Version, Screen Resolution, Dart Version, Processor Count, Dark Mode, IMAP/JMAP Account Counts.

Its primary use case is bug reporting — users copy the info or click "Create issue" to pre-fill a Codeberg issue. So additions should be things that actually help diagnose bugs.


Proposed Additions

1. Device Model / Manufacturer (the main ask)

Add a Device row showing e.g. Samsung / Galaxy S21 or Apple / iPhone 15 Pro.

Implementation:

  • Add device_info_plus to pubspec.yaml dependencies.
    It is the canonical Flutter package for this and is already used by package_info_plus's ecosystem.
  • In about_screen.dart create a Future<String?> _deviceModel() helper:
    • On Android: use AndroidDeviceInfomanufacturer + model
    • On iOS: use IosDeviceInfoname or utsname.machine
    • On macOS/Linux/Windows/Desktop: omit or show n/a (not relevant for mobile bug reports)
  • Pass the result into _buildMarkdown and add a | Device | ... | row.
  • Guard the device_info_plus call with Platform.isAndroid / Platform.isIOS to keep desktop clean.

2. Locale / Language

Add a Locale row showing e.g. de_DE. Useful when bugs are language- or locale-specific (date formatting, RTL, etc.).

Implementation:

  • Already available without a new package: Localizations.localeOf(context).toString() inside _buildMarkdown.
  • Add | Locale | ${Localizations.localeOf(context)} | row — one line change.

3. Text Scale Factor

Add a Text Scale row showing e.g. 1.3×. Useful for diagnosing layout overflow bugs triggered by accessibility settings.

Implementation:

  • MediaQuery.of(context).textScaler.scale(1.0) (Flutter 3.x API).
  • Add | Text Scale | ${textScale.toStringAsFixed(1)}× | row — one line change, no new package.

4. Database Schema Version

Add a DB Version row showing the current Drift schema version (currently 32). Useful for diagnosing migration issues.

Implementation:

  • The version constant is already in lib/data/db/database.dart. Expose it as a top-level const int kDatabaseSchemaVersion = 32; and import it in about_screen.dart.
  • Add | DB Version | $kDatabaseSchemaVersion | row.

Files to Change

File Change
pubspec.yaml Add device_info_plus: ^10.x to dependencies
lib/ui/screens/about_screen.dart Add _deviceModel() helper; extend _buildMarkdown with new rows; add imports
lib/data/db/database.dart Expose schema version as a named constant

Risks & Open Questions

  1. device_info_plus adds a native plugin — it requires Android/iOS build changes (permissions, Gradle, etc.). This is usually handled automatically by Flutter's plugin system, but it is a new dependency with a maintenance surface. Worth checking if the project wants to keep dependencies minimal.

  2. Device model on desktopdevice_info_plus supports macOS/Linux/Windows too, but device model is not meaningful there. The Platform.isAndroid / isIOS guards are important.

  3. Privacy — Device model (manufacturer + model string) is mildly personal data. It should only leave the device when the user explicitly copies the info or presses "Create issue". The current architecture already does this correctly, so no change needed there.

  4. Ordering of rows — Suggest: Device right after OS Version, since they are closely related. Locale and Text Scale can go after Dark Mode.

  5. _buildMarkdown is synchronous but device_info_plus is async — The current pattern uses a FutureBuilder<PackageInfo> already; we can widen it to Future.wait([_packageInfoFuture, _deviceModelFuture]) or add a second FutureBuilder.


Minimal Viable Change

If the goal is a small, low-risk PR: add only Locale and Text Scale — those require zero new packages and are two one-line additions. Add Device Model in a follow-up once the dependency is approved.

## Implementation Plan: Enriching the About Page ### Context The About page () currently displays a markdown table with these fields: App Version, Git Commit, Platform, OS Version, Screen Resolution, Dart Version, Processor Count, Dark Mode, IMAP/JMAP Account Counts. Its primary use case is **bug reporting** — users copy the info or click "Create issue" to pre-fill a Codeberg issue. So additions should be things that actually help diagnose bugs. --- ### Proposed Additions #### 1. Device Model / Manufacturer (the main ask) Add a **Device** row showing e.g. `Samsung / Galaxy S21` or `Apple / iPhone 15 Pro`. **Implementation:** - Add `device_info_plus` to `pubspec.yaml` dependencies. It is the canonical Flutter package for this and is already used by `package_info_plus`'s ecosystem. - In `about_screen.dart` create a `Future<String?> _deviceModel()` helper: - On Android: use `AndroidDeviceInfo` → `manufacturer` + `model` - On iOS: use `IosDeviceInfo` → `name` or `utsname.machine` - On macOS/Linux/Windows/Desktop: omit or show `n/a` (not relevant for mobile bug reports) - Pass the result into `_buildMarkdown` and add a `| Device | ... |` row. - Guard the `device_info_plus` call with `Platform.isAndroid` / `Platform.isIOS` to keep desktop clean. #### 2. Locale / Language Add a **Locale** row showing e.g. `de_DE`. Useful when bugs are language- or locale-specific (date formatting, RTL, etc.). **Implementation:** - Already available without a new package: `Localizations.localeOf(context).toString()` inside `_buildMarkdown`. - Add `| Locale | ${Localizations.localeOf(context)} |` row — one line change. #### 3. Text Scale Factor Add a **Text Scale** row showing e.g. `1.3×`. Useful for diagnosing layout overflow bugs triggered by accessibility settings. **Implementation:** - `MediaQuery.of(context).textScaler.scale(1.0)` (Flutter 3.x API). - Add `| Text Scale | ${textScale.toStringAsFixed(1)}× |` row — one line change, no new package. #### 4. Database Schema Version Add a **DB Version** row showing the current Drift schema version (currently 32). Useful for diagnosing migration issues. **Implementation:** - The version constant is already in `lib/data/db/database.dart`. Expose it as a top-level `const int kDatabaseSchemaVersion = 32;` and import it in `about_screen.dart`. - Add `| DB Version | $kDatabaseSchemaVersion |` row. --- ### Files to Change | File | Change | |------|--------| | `pubspec.yaml` | Add `device_info_plus: ^10.x` to `dependencies` | | `lib/ui/screens/about_screen.dart` | Add `_deviceModel()` helper; extend `_buildMarkdown` with new rows; add imports | | `lib/data/db/database.dart` | Expose schema version as a named constant | --- ### Risks & Open Questions 1. **`device_info_plus` adds a native plugin** — it requires Android/iOS build changes (permissions, Gradle, etc.). This is usually handled automatically by Flutter's plugin system, but it is a new dependency with a maintenance surface. Worth checking if the project wants to keep dependencies minimal. 2. **Device model on desktop** — `device_info_plus` supports macOS/Linux/Windows too, but device model is not meaningful there. The `Platform.isAndroid / isIOS` guards are important. 3. **Privacy** — Device model (manufacturer + model string) is mildly personal data. It should only leave the device when the user explicitly copies the info or presses "Create issue". The current architecture already does this correctly, so no change needed there. 4. **Ordering of rows** — Suggest: Device right after OS Version, since they are closely related. Locale and Text Scale can go after Dark Mode. 5. **`_buildMarkdown` is synchronous but `device_info_plus` is async** — The current pattern uses a `FutureBuilder<PackageInfo>` already; we can widen it to `Future.wait([_packageInfoFuture, _deviceModelFuture])` or add a second `FutureBuilder`. --- ### Minimal Viable Change If the goal is a small, low-risk PR: add only **Locale** and **Text Scale** — those require zero new packages and are two one-line additions. Add **Device Model** in a follow-up once the dependency is approved.
guettlibot commented 2026-05-25 18:47:02 +00:00 (Migrated from codeberg.org)

Planning complete. To resume this session:

claude --resume 308bbd3e-b571-4fd3-a2b8-44eb5a310531
Planning complete. To resume this session: ``` claude --resume 308bbd3e-b571-4fd3-a2b8-44eb5a310531 ```
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: guettli/sharedinbox#258