Carnet de Bord doit marcher dans un parking sans 4G. Si le trajet disparaît, le chauffeur (et la paie RSE) trinquent. Voici ce que j’ai gardé après plusieurs itérations.
Ordre non négociable
- Écrire en local (source de vérité immédiate)
- Marquer « pending sync »
- Pousser vers Firestore quand
connectivityle permet - Afficher un état honnête dans l’UI (pas un spinner éternel)
// Esprit du flux — pas le fichier exact
await localStore.saveTrip(trip);
syncQueue.enqueue(trip.id);
unawaited(syncService.flush());
Conflits
Je n’ai pas construit un CRDT. Last-write-wins + horodatage serveur suffit pour ce métier. Si deux devices éditent la même journée, le cas est rare ; le coût d’un merge parfait ne vaut pas le retard produit.
Suite
Le site Laravel héberge aussi Flutter Web sous /app/ — même produit, autre surface. La discipline offline reste côté mobile natif en priorité.