Offline Sync Queue
ArchbaseOfflineSyncQueue — fila persistente (Hive) com retry em backoff exponencial e auto-sync ao reconectar.
Como funciona
- Sua tela enfileira uma operação (POST/PUT/DELETE) com
enqueue(...). - A fila persiste em Hive.
- Quando há conectividade (
ArchbaseConnectivityService.isConnected), a queue tenta enviar. - Em falha, faz backoff: 5s, 10s, 20s, 40s, 80s (max 5 min).
- Ao reconectar, dispara flush automaticamente.
Enqueue
final queue = ArchbaseBootstrap.syncQueue;
await queue.enqueue(SyncOperation(
id: const Uuid().v4(),
method: SyncMethod.post,
path: '/visitas',
body: visita.toJson(),
createdAt: DateTime.now(),
));
A operação será enviada quando der — quase imediatamente se online, ou após reconexão se offline.
Estado reativo
queue.status.addListener(() {
final s = queue.status.value;
print('pendentes: ${s.pendingCount}, syncing: ${s.isSyncing}');
});
Ou use o ArchbaseSyncStatusBanner que faz isso visualmente:
ArchbaseSyncStatusBanner(
queue: ArchbaseBootstrap.syncQueue,
connectivity: ArchbaseBootstrap.connectivity,
)
Flush manual
// Tenta enviar tudo agora
await queue.flush();
Chamadas concorrentes a flush() são deduplicadas — só roda uma vez.
Strategy customizada
Por padrão, a queue só faz apiClient.postJson/putJson/delete no path. Para customizar (ex.: adicionar headers extras, transformar body), passe um SyncStrategy:
ArchbaseOfflineSyncQueue(
apiClient: ArchbaseBootstrap.api,
storage: ArchbaseBootstrap.storage,
connectivity: ArchbaseBootstrap.connectivity,
strategy: MyCustomStrategy(),
);