Commit 2c0e502

derdilla <derdilla06@gmail.com>
2023-08-23 14:42:29
add setting to open addMeasurement page on app launch
1 parent 9040764
lib/l10n/app_en.arb
@@ -405,5 +405,9 @@
   "exportPdfExportStatistics": "Statistics",
   "@exportPdfExportStatistics": {},
   "exportPdfExportData": "Data table",
-  "@exportPdfExportData": {}
+  "@exportPdfExportData": {},
+  "startWithAddMeasurementPage": "Measurement on launch",
+  "@startWithAddMeasurementPage": {},
+  "startWithAddMeasurementPageDescription": "Upon app launch, measurement input screen shown.",
+  "@startWithAddMeasurementPageDescription": {}
 }
lib/model/ram_only_implementations.dart
@@ -468,6 +468,19 @@ class RamSettings extends ChangeNotifier implements Settings {
     notifyListeners();
   }
 
+  bool _startWithAddMeasurementPage = false;
+
+  @override
+  bool get startWithAddMeasurementPage {
+    return _startWithAddMeasurementPage;
+  }
+
+  @override
+  set startWithAddMeasurementPage(bool value) {
+    _startWithAddMeasurementPage = value;
+    notifyListeners();
+  }
+
   @override
   void changeStepSize(TimeStep value) {
     graphStepSize = value;
lib/model/settings_store.dart
@@ -577,6 +577,15 @@ class Settings extends ChangeNotifier {
     _prefs.setBool('exportPdfExportData', value);
     notifyListeners();
   }
+
+  bool get startWithAddMeasurementPage {
+    return _prefs.getBool('startWithAddMeasurementPage') ?? false;
+  }
+
+  set startWithAddMeasurementPage(bool value) {
+    _prefs.setBool('startWithAddMeasurementPage', value);
+    notifyListeners();
+  }
 }
 
 enum TimeStep {
lib/screens/home.dart
@@ -5,9 +5,14 @@ import 'package:blood_pressure_app/screens/add_measurement.dart';
 import 'package:blood_pressure_app/screens/settings.dart';
 import 'package:blood_pressure_app/screens/statistics.dart';
 import 'package:flutter/material.dart';
+import 'package:flutter/scheduler.dart';
 import 'package:flutter/services.dart';
 import 'package:provider/provider.dart';
 
+/// The only use of this variable is to avoid loading the AddMeasurementPage twice,
+/// when startWithAddMeasurementPage is active
+bool _appStart = true;
+
 class AppHome extends StatelessWidget {
   const AppHome({super.key});
 
@@ -20,6 +25,14 @@ class AppHome extends StatelessWidget {
       padding = const EdgeInsets.all(80);
     }
 
+    // direct use of settings possible as no listening is required
+    if (_appStart && Provider.of<Settings>(context, listen: false).startWithAddMeasurementPage) {
+      SchedulerBinding.instance.addPostFrameCallback((_) {
+        Navigator.of(context).push(MaterialPageRoute(builder: (context) => const AddMeasurementPage()));
+      });
+    }
+    _appStart = false;
+
     return Scaffold(
       body: OrientationBuilder(
         builder: (context, orientation) {
lib/screens/settings.dart
@@ -245,13 +245,22 @@ class SettingsPage extends StatelessWidget {
                 }
               ),
               SwitchSettingsTile(
-                  title: Text(AppLocalizations.of(context)!.drawRegressionLines),
-                  leading: const Icon(Icons.trending_down_outlined),
-                  description: Text(AppLocalizations.of(context)!.drawRegressionLinesDesc),
-                  initialValue: settings.drawRegressionLines,
-                  onToggle: (value) {
-                    settings.drawRegressionLines = value;
-                  }
+                title: Text(AppLocalizations.of(context)!.drawRegressionLines),
+                leading: const Icon(Icons.trending_down_outlined),
+                description: Text(AppLocalizations.of(context)!.drawRegressionLinesDesc),
+                initialValue: settings.drawRegressionLines,
+                onToggle: (value) {
+                  settings.drawRegressionLines = value;
+                }
+              ),
+              SwitchSettingsTile(
+                title: Text(AppLocalizations.of(context)!.startWithAddMeasurementPage),
+                description: Text(AppLocalizations.of(context)!.startWithAddMeasurementPageDescription),
+                leading: const Icon(Icons.electric_bolt_outlined),
+                initialValue: settings.startWithAddMeasurementPage,
+                onToggle: (value) {
+                  settings.startWithAddMeasurementPage = value;
+                }
               ),
             ]),
             SettingsSection(
lib/main.dart
@@ -28,14 +28,7 @@ class AppRoot extends StatelessWidget {
   @override
   Widget build(BuildContext context) {
     return Consumer<Settings>(builder: (context, settings, child) {
-      late final ThemeMode mode;
-      if (settings.followSystemDarkMode) {
-        mode = ThemeMode.system;
-      } else if (settings.darkMode) {
-        mode = ThemeMode.dark;
-      } else {
-        mode = ThemeMode.light;
-      }
+      final mode = getMode(settings);
 
       return MaterialApp(
         title: 'Blood Pressure App',
@@ -67,4 +60,14 @@ class AppRoot extends StatelessWidget {
       );
     });
   }
+
+  ThemeMode getMode(Settings settings) {
+    if (settings.followSystemDarkMode) {
+      return ThemeMode.system;
+    } else if (settings.darkMode) {
+      return ThemeMode.dark;
+    } else {
+      return ThemeMode.light;
+    }
+  }
 }