diff --git a/lib/app_state.dart b/lib/app_state.dart index c96719d..f892ffa 100644 --- a/lib/app_state.dart +++ b/lib/app_state.dart @@ -28,6 +28,17 @@ class AppState extends ChangeNotifier { _init(); } + // ------------------- Offline Mode ------------------- + static const String _offlineModePrefsKey = 'offline_mode'; + bool _offlineMode = false; + bool get offlineMode => _offlineMode; + Future setOfflineMode(bool enabled) async { + _offlineMode = enabled; + final prefs = await SharedPreferences.getInstance(); + await prefs.setBool(_offlineModePrefsKey, enabled); + notifyListeners(); + } + final _auth = AuthService(); String? _username; @@ -114,6 +125,10 @@ class AppState extends ChangeNotifier { await prefs.remove(_legacyTestModePrefsKey); await prefs.setInt(_uploadModePrefsKey, _uploadMode.index); } + // Offline mode loading + if (prefs.containsKey(_offlineModePrefsKey)) { + _offlineMode = prefs.getBool(_offlineModePrefsKey) ?? false; + } // Ensure AuthService follows loaded mode _auth.setUploadMode(_uploadMode); diff --git a/lib/screens/settings_screen.dart b/lib/screens/settings_screen.dart index 6e4aa31..fb309b9 100644 --- a/lib/screens/settings_screen.dart +++ b/lib/screens/settings_screen.dart @@ -4,6 +4,7 @@ import 'settings_screen_sections/upload_mode_section.dart'; import 'settings_screen_sections/profile_list_section.dart'; import 'settings_screen_sections/queue_section.dart'; import 'settings_screen_sections/offline_areas_section.dart'; +import 'settings_screen_sections/offline_mode_section.dart'; import 'settings_screen_sections/about_section.dart'; class SettingsScreen extends StatelessWidget { @@ -24,10 +25,8 @@ class SettingsScreen extends StatelessWidget { Divider(), ProfileListSection(), Divider(), - Padding( - padding: EdgeInsets.only(bottom: 8.0), - child: Text('Offline Areas', style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold)), - ), + OfflineModeSection(), + Divider(), OfflineAreasSection(), Divider(), AboutSection(), diff --git a/lib/screens/settings_screen_sections/offline_mode_section.dart b/lib/screens/settings_screen_sections/offline_mode_section.dart new file mode 100644 index 0000000..36a734a --- /dev/null +++ b/lib/screens/settings_screen_sections/offline_mode_section.dart @@ -0,0 +1,21 @@ +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; +import '../../app_state.dart'; + +class OfflineModeSection extends StatelessWidget { + const OfflineModeSection({super.key}); + + @override + Widget build(BuildContext context) { + final appState = context.watch(); + return ListTile( + leading: const Icon(Icons.wifi_off), + title: const Text('Offline Mode'), + subtitle: const Text('Disable all network requests except for local/offline areas.'), + trailing: Switch( + value: appState.offlineMode, + onChanged: (value) async => await appState.setOfflineMode(value), + ), + ); + } +}