2026-04-16 07:35:56 +02:00
# SharedInbox Flutter — Agent Guide
## Code conventions
- No `if` chains where a pattern/match or data-driven approach works.
- Fail loudly — `throw StateError(...)` beats silent fallbacks.
- New source files go under `lib/core/` (interfaces/models), `lib/data/` (implementations), or `lib/ui/` (screens/widgets).
## Drift (DB)
- Schema in `lib/data/db/database.dart` .
- After any schema change run: `dart run build_runner build --delete-conflicting-outputs`
- Generated `database.g.dart` is committed — do not hand-edit it.
## enough_mail (vendored)
- Located at `packages/enough_mail/` — edit freely.
- IMAP client helpers are in `lib/data/imap/imap_client_factory.dart` .
## Running
2026-04-17 22:20:10 +02:00
Flutter build dependencies (libgtk-3-dev, libepoxy-dev, libsecret-1-dev, etc.) are installed via apt — see the Flutter Linux docs. The nix dev shell provides only tools: `task` , `fvm` , `stalwart-mail` .
Enter the nix dev shell first: `nix develop`
2026-04-16 07:35:56 +02:00
```bash
# Code generation (must run after schema changes)
2026-04-17 22:20:10 +02:00
task codegen
2026-04-16 07:35:56 +02:00
# Desktop
2026-04-17 22:20:10 +02:00
task run
2026-04-16 07:35:56 +02:00
# Tests
2026-04-17 22:20:10 +02:00
task test
2026-04-16 07:35:56 +02:00
```
## Adding a screen
1. Create `lib/ui/screens/my_screen.dart` .
2. Add a `GoRoute` in `lib/ui/router.dart` .
3. No separate ViewModel file needed — use `ConsumerWidget` / `ConsumerStatefulWidget` directly with Riverpod providers.