Offline Support

This commit is contained in:
2026-04-27 06:20:39 +08:00
parent 7d8851a94a
commit 48cd3bcd60
121 changed files with 14798 additions and 2214 deletions
+11 -2
View File
@@ -5,17 +5,25 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'routing/app_router.dart';
import 'models/profile.dart';
import 'providers/connectivity_provider.dart';
import 'providers/profile_provider.dart';
import 'services/background_location_service.dart';
import 'theme/app_theme.dart';
import 'utils/snackbar.dart';
import 'widgets/ios_install_prompt.dart';
import 'widgets/offline_banner.dart';
class TasqApp extends ConsumerWidget {
const TasqApp({super.key});
@override
Widget build(BuildContext context, WidgetRef ref) {
// Keep the connectivity monitor alive at the root so the global online
// check is wired into StreamRecoveryWrapper before any provider subscribes
// to a Supabase realtime stream. Without this watch the autoDispose
// provider only stays alive while OfflineBanner is mounted, which is too
// late for offline-cold-launch detection.
ref.watch(connectivityMonitorProvider);
final router = ref.watch(appRouterProvider);
// Ensure background service is running if the profile indicates tracking.
@@ -48,8 +56,9 @@ class TasqApp extends ConsumerWidget {
GlobalCupertinoLocalizations.delegate,
FlutterQuillLocalizations.delegate,
],
builder: (context, child) =>
IosInstallPrompt(child: child ?? const SizedBox.shrink()),
builder: (context, child) => OfflineBanner(
child: IosInstallPrompt(child: child ?? const SizedBox.shrink()),
),
);
}
}