Commit e81601a

derdilla <derdilla06@gmail.com>
2023-05-06 08:28:31
FEAT: toggle time input
1 parent 47732f7
Changed files (3)
lib/model/settings.dart
@@ -24,6 +24,7 @@ class Settings extends ChangeNotifier {
   late MaterialColor _sysColor;
   late MaterialColor _diaColor;
   late MaterialColor _pulColor;
+  late bool _allowManualTimeInput;
 
   Settings._create();
   Future<void> _asyncInit() async {
@@ -69,6 +70,7 @@ class Settings extends ChangeNotifier {
     var pSysColor = _getSetting('_sysColor');
     var pDiaColor = _getSetting('_diaColor');
     var pPulColor = _getSetting('_pulColor');
+    var pAllowManualTimeInput = _getSetting('_allowManualTimeInput');
     // var ...
 
     _graphStepSize = (await pGraphStepSize as int?) ?? TimeStep.day;
@@ -80,6 +82,7 @@ class Settings extends ChangeNotifier {
     _sysColor = createMaterialColor(await pSysColor as int? ?? 0xFF009688);
     _diaColor = createMaterialColor(await pDiaColor as int? ?? 0xFF4CAF50);
     _pulColor = createMaterialColor(await pPulColor as int? ?? 0xFFF44336);
+    _allowManualTimeInput = ((await pAllowManualTimeInput as int?) ?? 1) == 1 ? true : false;
     // ...
     return;
   }
@@ -179,6 +182,14 @@ class Settings extends ChangeNotifier {
     _saveSetting('_pulColor', newColor.value);
     notifyListeners();
   }
+  bool get allowManualTimeInput {
+    return _allowManualTimeInput;
+  }
+  set allowManualTimeInput(bool newSetting) {
+    _allowManualTimeInput = newSetting;
+    _saveSetting('_allowManualTimeInput', newSetting ? 1 : 0);
+    notifyListeners();
+  }
 
 }
 
lib/screens/add_measurement.dart
@@ -1,4 +1,5 @@
 import 'package:blood_pressure_app/model/blood_pressure.dart';
+import 'package:blood_pressure_app/model/settings.dart';
 import 'package:blood_pressure_app/screens/home.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter/services.dart';
@@ -37,23 +38,31 @@ class _AddMeasurementPageState extends State<AddMeasurementPage> {
               mainAxisAlignment: MainAxisAlignment.center,
               crossAxisAlignment: CrossAxisAlignment.center,
               children: [
-                TextFormField(
-                  initialValue: _formatter.format(_time),
-                  decoration: const InputDecoration(
-                      hintText: 'time'
-                  ),
-                  validator: (String? value) {
-                    if (value == null || value.isEmpty) {
-                      return 'Please enter a value';
-                    } else {
-                      try {
-                        _time = _formatter.parse(value);
-                      } on FormatException {
-                        return 'date format: ${_formatter.pattern}';
+                Consumer<Settings>(
+                    builder: (context, settings, child) {
+                      if(settings.allowManualTimeInput) {
+                        return TextFormField(
+                          initialValue: _formatter.format(_time),
+                          decoration: const InputDecoration(
+                              hintText: 'time'
+                          ),
+                          validator: (String? value) {
+                            if (value == null || value.isEmpty) {
+                              return 'Please enter a value';
+                            } else {
+                              try {
+                                _time = _formatter.parse(value);
+                              } on FormatException {
+                                return 'date format: ${_formatter.pattern}';
+                              }
+                            }
+                            return null;
+                          },
+                        );
+                      } else {
+                        return const SizedBox.shrink();
                       }
                     }
-                    return null;
-                  },
                 ),
                 TextFormField(
                   decoration: const InputDecoration(
lib/screens/settings.dart
@@ -22,6 +22,14 @@ class SettingsScreen extends StatelessWidget {
               SettingsSection(
                   title: const Text('layout'),
                   tiles: <SettingsTile>[
+                    SettingsTile.switchTile(
+                        initialValue: settings.allowManualTimeInput,
+                        onToggle: (value) {
+                          settings.allowManualTimeInput = value;
+                        },
+                        leading: const Icon(Icons.auto_mode),
+                        title: const Text('allow manual time input')
+                    ),
                     SettingsTile.switchTile(
                         initialValue: settings.followSystemDarkMode,
                         onToggle: (value) {