From 17a22d7a4c9a9937f57cef15c3e06a5f883c9e5d Mon Sep 17 00:00:00 2001 From: Pierre HUBERT Date: Thu, 17 Jul 2025 18:04:03 +0200 Subject: [PATCH] Add an option to start on scans screen instead of capture screen --- .../lib/routes/settings/settings_screen.dart | 15 +++++++++++++++ moneymgr_mobile/lib/services/router/router.dart | 5 ++++- moneymgr_mobile/lib/services/storage/prefs.dart | 8 ++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/moneymgr_mobile/lib/routes/settings/settings_screen.dart b/moneymgr_mobile/lib/routes/settings/settings_screen.dart index f1765e4..3e1c796 100644 --- a/moneymgr_mobile/lib/routes/settings/settings_screen.dart +++ b/moneymgr_mobile/lib/routes/settings/settings_screen.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:moneymgr_mobile/providers/settings.dart'; +import 'package:moneymgr_mobile/services/storage/prefs.dart'; import 'package:moneymgr_mobile/utils/extensions.dart'; class SettingsScreen extends ConsumerWidget { @@ -8,6 +9,7 @@ class SettingsScreen extends ConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { + final prefs = ref.watch(prefsProvider).requireValue; final themeMode = ref.watch(currentThemeModeProvider); void onTapThemeMode() => @@ -15,6 +17,11 @@ class SettingsScreen extends ConsumerWidget { void onTapLicenses() => context.showAppLicensePage(); + handleToggleStartScreen(v) async { + await prefs.setStartOnScansListScreen(v); + ref.invalidate(prefsProvider); + } + return Scaffold( appBar: AppBar(title: const Text('Settings')), body: ListView( @@ -25,6 +32,14 @@ class SettingsScreen extends ConsumerWidget { trailing: Text(themeMode.label), onTap: onTapThemeMode, ), + SwitchListTile( + value: prefs.startOnScansListScreen(), + onChanged: handleToggleStartScreen, + title: Text("Start on scans screen"), + subtitle: Text( + "Do not start camera automatically on application startup", + ), + ), const Divider(), ListTile( leading: const Icon(Icons.info_outline), diff --git a/moneymgr_mobile/lib/services/router/router.dart b/moneymgr_mobile/lib/services/router/router.dart index 5c67a62..624a7b8 100644 --- a/moneymgr_mobile/lib/services/router/router.dart +++ b/moneymgr_mobile/lib/services/router/router.dart @@ -11,6 +11,7 @@ import 'package:moneymgr_mobile/routes/scan_details/scan_details.dart'; import 'package:moneymgr_mobile/routes/scans_list/scans_list_screen.dart'; import 'package:moneymgr_mobile/routes/settings/settings_screen.dart'; import 'package:moneymgr_mobile/services/router/routes_list.dart'; +import 'package:moneymgr_mobile/services/storage/prefs.dart'; import 'package:moneymgr_mobile/widgets/load_startup_data.dart'; import 'package:moneymgr_mobile/widgets/scaffold_with_navigation.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; @@ -29,6 +30,8 @@ GoRouter router(Ref ref) { authStateNotifier.value = value; }); + final prefs = ref.read(prefsProvider).requireValue; + // This is the only place you need to define your navigation items. The items // will be propagated automatically to the router and the navigation bar/rail // of the scaffold. @@ -70,7 +73,7 @@ GoRouter router(Ref ref) { final router = GoRouter( debugLogDiagnostics: true, - initialLocation: navigationItems.first.path, + initialLocation: prefs.startOnScansListScreen() ? scansPage : capturePage, routes: [ GoRoute(path: homePage, builder: (_, __) => const Scaffold()), GoRoute(path: authPage, builder: (_, __) => const LoginScreen()), diff --git a/moneymgr_mobile/lib/services/storage/prefs.dart b/moneymgr_mobile/lib/services/storage/prefs.dart index 445fabd..372c3f5 100644 --- a/moneymgr_mobile/lib/services/storage/prefs.dart +++ b/moneymgr_mobile/lib/services/storage/prefs.dart @@ -15,6 +15,14 @@ Future prefs(Ref ref) => ); extension MoneyMgrSharedPreferences on SharedPreferencesWithCache { + bool startOnScansListScreen() { + return getBool("startOnScansListScreen") ?? false; + } + + Future setStartOnScansListScreen(bool start) async { + await setBool("startOnScansListScreen", start); + } + ServerConfig? serverConfig() { final json = getString("serverConfig"); if (json != null) return ServerConfig.fromJson(jsonDecode(json));