App-Start blockiert auf zwei HTTP-Requests ohne Timeout #1

Closed
opened 2026-09-09 20:12:41 +00:00 by Aceless · 1 comment
Owner

main() wartet vor runApp() synchron auf zwei Netzwerk-Aufrufe:

final newestVersion = await appInfoService.getAppVersion();
...
updateUri = await appInfoService.getAppUpdateUri();

ApiClient setzt nirgends ein Timeout. Ist der Server nicht erreichbar (falsches WLAN, Server aus, unterwegs), haengt der TCP-Connect bis zum OS-Timeout. Die App bleibt bis dahin auf dem nativen Splash stehen und wirkt eingefroren. Es gibt auch kein try/catch: wirft getAppVersion(), startet die App gar nicht.

Reproduktion: WLAN trennen oder Backend stoppen, App starten.

Vorschlag:

  • Version-Check nach runApp() verschieben und im Hintergrund laufen lassen
  • try/catch um beide Aufrufe
  • In ApiClient generell .timeout(const Duration(seconds: 10)) auf jeden Request

Dateien: app/lib/main.dart:9-32, app/lib/services/api_client.dart:33-74

`main()` wartet vor `runApp()` synchron auf zwei Netzwerk-Aufrufe: ```dart final newestVersion = await appInfoService.getAppVersion(); ... updateUri = await appInfoService.getAppUpdateUri(); ``` `ApiClient` setzt nirgends ein Timeout. Ist der Server nicht erreichbar (falsches WLAN, Server aus, unterwegs), haengt der TCP-Connect bis zum OS-Timeout. Die App bleibt bis dahin auf dem nativen Splash stehen und wirkt eingefroren. Es gibt auch kein `try/catch`: wirft `getAppVersion()`, startet die App gar nicht. **Reproduktion:** WLAN trennen oder Backend stoppen, App starten. **Vorschlag:** - Version-Check nach `runApp()` verschieben und im Hintergrund laufen lassen - `try/catch` um beide Aufrufe - In `ApiClient` generell `.timeout(const Duration(seconds: 10))` auf jeden Request Dateien: `app/lib/main.dart:9-32`, `app/lib/services/api_client.dart:33-74`
Author
Owner

Behoben auf Branch frontend-improvements.

Versionspruefung laeuft jetzt ueber appUpdateProvider nach dem ersten Frame, faengt Fehler selbst ab, und jeder Request hat 10s Timeout.

Commits
  • 47edeeb Added Claude
  • 9b16a6e Einstellungen mit Ladebalken, url_launcher-Plugin-Registrierung
  • 8ad68a4 Settings erreichbar, Secrets sichern, Theme-Tokens, toter Code weg, Tests
  • bf204d3 Rezeptliste, Detail, Vorschlaege und Spaces ueberarbeiten
  • d85c681 Rezept-Editor: Absturz, stiller Datenverlust und Controller-Leaks beheben
  • d970fbe Provider-State korrigieren, Fehler sichtbar machen, Wochenlogik zentralisieren
  • 71e557d Start entkoppeln, API-Client haerten, Theme auf Tokens umstellen

flutter analyze: 0 Issues. flutter test: 22 Tests gruen.

Behoben auf Branch `frontend-improvements`. Versionspruefung laeuft jetzt ueber appUpdateProvider nach dem ersten Frame, faengt Fehler selbst ab, und jeder Request hat 10s Timeout. <details><summary>Commits</summary> - 47edeeb Added Claude - 9b16a6e Einstellungen mit Ladebalken, url_launcher-Plugin-Registrierung - 8ad68a4 Settings erreichbar, Secrets sichern, Theme-Tokens, toter Code weg, Tests - bf204d3 Rezeptliste, Detail, Vorschlaege und Spaces ueberarbeiten - d85c681 Rezept-Editor: Absturz, stiller Datenverlust und Controller-Leaks beheben - d970fbe Provider-State korrigieren, Fehler sichtbar machen, Wochenlogik zentralisieren - 71e557d Start entkoppeln, API-Client haerten, Theme auf Tokens umstellen </details> `flutter analyze`: 0 Issues. `flutter test`: 22 Tests gruen.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
Aceless/RecipePlanner#1
No description provided.