syncNow method
Implementation
Future<void> syncNow() async {
if (_isSyncing || !_connectivityMonitor.isOnline) return;
_isSyncing = true;
_updateStatus(SyncStatus.syncing);
try {
final requests = await _queue.getPendingRequests();
if (requests.isEmpty) {
_updateStatus(_connectivityMonitor.isOnline ? SyncStatus.idle : SyncStatus.offline);
_isSyncing = false;
return;
}
for (var request in requests) {
bool success = await _processRequest(request);
if (success) {
await _queue.remove(request.id);
} else {
// Keep request in queue for future retries
}
}
final remaining = await _queue.getPendingRequests();
if (remaining.isEmpty) {
_updateStatus(SyncStatus.success);
// eventually go back to idle
Future.delayed(const Duration(seconds: 3), () {
if (_currentStatus == SyncStatus.success) {
_updateStatus(SyncStatus.idle);
}
});
} else {
_updateStatus(SyncStatus.failed);
}
} catch (e) {
_updateStatus(SyncStatus.failed);
} finally {
_isSyncing = false;
}
}