Optimize deployment, fix E2E flakiness, and implement database-backed threading

- Optimize task deploy-android with marker files and source/generate tracking.
- Fix flaky Android E2E test with pumpAndSettle and safety delays.
- Implement global CrashScreen and error handlers in main.dart.
- Refactor threading to use a persistent Threads table for performance.
- Add database indexes and migration for schema v18.
- Enhance coverage gate with ghost path checks and increased coverage (82%).
This commit is contained in:
Thomas Güttler
2026-05-07 22:07:54 +02:00
parent 3c90818845
commit 656d4b46d7
9 changed files with 550 additions and 59 deletions
+9 -4
View File
@@ -208,7 +208,13 @@ void main() {
final saveButton = find.widgetWithText(FilledButton, 'Save');
await tester.ensureVisible(saveButton);
// Dismiss keyboard to stop cursor animation and avoid layout artifacts.
FocusManager.instance.primaryFocus?.unfocus();
await tester.pumpAndSettle();
// Extra wait to ensure layout is fully stable on slow emulators.
await tester.pump(const Duration(seconds: 2));
await tester.tap(saveButton);
// Wait for the account tile to appear in the account list. Use a
// ListTile-scoped finder so we don't exit early when 'Alice' still
// appears in the form's EditableText before navigation pops back.
@@ -220,10 +226,9 @@ void main() {
// ── Navigate to mailboxes ──────────────────────────────────────────────
_log('navigate to mailboxes');
// On the slow Android emulator (software rendering), aliceTile can be
// briefly absent right after pumpUntil's trailing 300ms settle while the
// route-pop animation finalises. Re-confirm it's present before tapping.
await pumpUntil(tester, aliceTile, timeout: const Duration(seconds: 5));
// On the slow Android emulator (software rendering), animations can lag.
// Ensure the route transition is fully settled before tapping.
await tester.pumpAndSettle();
await tester.tap(aliceTile);
await pumpUntil(tester, find.text('INBOX'));
_log('mailboxes settled');