feat adds proper syncing feature

Signed-off-by: Menno van Leeuwen <menno@vleeuwen.me>
This commit is contained in:
2025-08-27 20:51:29 +02:00
parent b0d5130cbf
commit 2017fd097d
22 changed files with 1518 additions and 3258 deletions

View File

@@ -4,7 +4,8 @@ import 'package:provider/provider.dart';
import '../models/supplement.dart';
import '../providers/settings_provider.dart';
import '../providers/supplement_provider.dart';
import '../providers/sync_provider.dart';
import '../providers/simple_sync_provider.dart';
import '../services/database_sync_service.dart';
import '../widgets/supplement_card.dart';
import 'add_supplement_screen.dart';
import 'archived_supplements_screen.dart';
@@ -19,7 +20,7 @@ class SupplementsListScreen extends StatelessWidget {
title: const Text('My Supplements'),
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
actions: [
Consumer<SyncProvider>(
Consumer<SimpleSyncProvider>(
builder: (context, syncProvider, child) {
if (!syncProvider.isConfigured) {
return const SizedBox.shrink();
@@ -32,12 +33,13 @@ class SupplementsListScreen extends StatelessWidget {
height: 20,
child: CircularProgressIndicator(strokeWidth: 2),
)
: syncProvider.status.name == 'success' &&
DateTime.now().difference(syncProvider.lastSyncTime ?? DateTime.now()).inSeconds < 5
: syncProvider.status == SyncStatus.completed &&
syncProvider.lastSyncTime != null &&
DateTime.now().difference(syncProvider.lastSyncTime!).inSeconds < 5
? const Icon(Icons.check, color: Colors.green)
: const Icon(Icons.sync),
onPressed: syncProvider.isSyncing ? null : () {
syncProvider.performManualSync();
syncProvider.syncDatabase();
},
tooltip: syncProvider.isSyncing ? 'Syncing...' : 'Force Sync',
);
@@ -56,8 +58,8 @@ class SupplementsListScreen extends StatelessWidget {
),
],
),
body: Consumer3<SupplementProvider, SettingsProvider, SyncProvider>(
builder: (context, provider, settingsProvider, syncProvider, child) {
body: Consumer2<SupplementProvider, SettingsProvider>(
builder: (context, provider, settingsProvider, child) {
if (provider.isLoading) {
return const Center(child: CircularProgressIndicator());
}