97 lines
2.9 KiB
Markdown
97 lines
2.9 KiB
Markdown
<!-- SPDX-FileCopyrightText: 2026 FocusFlow contributors -->
|
|
<!-- SPDX-License-Identifier: AGPL-3.0-only -->
|
|
|
|
# FocusFlow Flutter
|
|
|
|
Flutter desktop app target for the FocusFlow UI work.
|
|
|
|
## Current Scope
|
|
|
|
The app launches into the compact Today timeline. Normal startup now opens an
|
|
on-disk SQLite database and bootstraps owner settings plus the default Home
|
|
project when they are missing.
|
|
|
|
The compact Today screen can toggle completion for currently rendered task
|
|
cards. Backlog widgets and quick-capture controls exist for tests and focused
|
|
composition paths, but the sidebar Backlog navigation remains out of scope for
|
|
this screen.
|
|
|
|
## Runtime Data
|
|
|
|
Normal runtime uses `lib/app/persistent_scheduler_composition.dart`, which reads
|
|
`SCHEDULER_SQLITE_PATH` from a Dart define. If no define is present, it uses the
|
|
local dev convention:
|
|
|
|
```text
|
|
~/ADHD_Scheduler/scheduler.sqlite
|
|
```
|
|
|
|
Static demo data still lives in `lib/app/demo_scheduler_composition.dart`, but
|
|
it is for deterministic widget/visual tests and explicit demo composition only.
|
|
It is not inserted during normal startup.
|
|
|
|
Widgets consume `TodayScreenData` from `lib/models/today_screen_models.dart`.
|
|
Scheduler core remains the source of truth for task state and Today ordering.
|
|
|
|
## Package Boundary
|
|
|
|
Allowed app imports include public scheduler APIs such as:
|
|
|
|
```dart
|
|
import 'package:scheduler_core/scheduler_core.dart';
|
|
```
|
|
|
|
The persistent composition root may import
|
|
`package:scheduler_persistence_sqlite/sqlite.dart` and `dart:io` for runtime
|
|
path resolution. Widgets/controllers must not import scheduler `src/` files,
|
|
Drift, SQLite adapters, desktop notification implementations, backup/export
|
|
packages, or direct OS APIs. `test/forbidden_imports_test.dart` enforces that
|
|
boundary.
|
|
|
|
## Intentionally No-op
|
|
|
|
- Sidebar navigation.
|
|
- Date navigation and calendar buttons.
|
|
- Compact/Normal toggle.
|
|
- Settings button.
|
|
- Show upcoming.
|
|
- Timeline card action icons.
|
|
- Modal Push, Move to Backlog, and Break up buttons.
|
|
|
|
## Persistence Proof
|
|
|
|
Current focused tests prove:
|
|
|
|
- first run opens an empty SQLite file without seeded task rows,
|
|
- quick capture writes a backlog task,
|
|
- scheduling writes planned Today placement,
|
|
- done and not-done state persists,
|
|
- closing and reopening the same SQLite file reloads the task state.
|
|
|
|
Manual verification:
|
|
|
|
```sh
|
|
scripts/bootstrap_dev.sh
|
|
scripts/dev.sh --sqlite /tmp/focus_flow_persistence_plan_1.sqlite
|
|
```
|
|
|
|
Use the same `--sqlite` path after closing the app to confirm state persists. To
|
|
reset local dev data, close the app and delete the chosen `.sqlite` file. This is
|
|
only a dev reset; backup/restore UI remains out of scope.
|
|
|
|
## Commands
|
|
|
|
```sh
|
|
flutter pub get
|
|
flutter analyze
|
|
flutter test
|
|
```
|
|
|
|
Run these from `apps/focus_flow_flutter/`.
|
|
|
|
## Next Plans
|
|
|
|
- Wire visible Backlog navigation and quick-capture UI into the main shell.
|
|
- Wire functional Push, Move to Backlog, and Break up actions.
|
|
- Add real navigation/settings.
|
|
- Add Shield/Recovery only in a later scope.
|