Commit a038eb8

derdilla <derdilla06@gmail.com>
2023-06-19 16:34:29
make export settings persistent
1 parent 1e8593d
Changed files (4)
lib/l10n/app_de.arb
@@ -36,6 +36,7 @@
   "errNotEnoughDataToGraph": "Zuwenig Daten für Graphen",
   "errNoData": "Keine Daten",
   "errNoRangeForExport": "Sie müssen angeben, welche daten sie exportieren wollen.",
+  "errPleaseSelect": "Bitte auswählen",
 
   "btnCancel": "ABBRUCH",
   "btnSave": "OK",
lib/l10n/app_en.arb
@@ -36,6 +36,7 @@
   "errNotEnoughDataToGraph": "not enough data to draw graph",
   "errNoData": "no data",
   "errNoRangeForExport": "You need to specify a range in which data is exported.",
+  "errPleaseSelect": "please select",
 
   "btnCancel": "CANCEL",
   "btnSave": "SAVE",
lib/model/settings_store.dart
@@ -10,10 +10,6 @@ class Settings extends ChangeNotifier {
 
   DateTime? _displayDataStart;
   DateTime? _displayDataEnd;
-
-  DateTimeRange? _exportDataRange;
-  List<String> _exportItems = ['timestampUnixMs', 'systolic', 'diastolic', 'pulse', 'notes'];
-  List<String> _exportAddableItems = [];
   
   Settings._create();
   // factory method, to allow for async constructor
@@ -351,29 +347,32 @@ class Settings extends ChangeNotifier {
     notifyListeners();
   }
 
-  DateTimeRange? get exportDataRange {
-    return _exportDataRange;
+  DateTimeRange get exportDataRange {
+    final start = DateTime.fromMillisecondsSinceEpoch(_prefs.getInt('exportDataRangeStartEpochMs') ?? 0);
+    final end = DateTime.fromMillisecondsSinceEpoch(_prefs.getInt('exportDataRangeEndEpochMs') ?? 0);
+    return DateTimeRange(start: start, end: end);
   }
 
-  set exportDataRange(DateTimeRange? value) {
-    _exportDataRange = value;
+  set exportDataRange(DateTimeRange value) {
+    _prefs.setInt('exportDataRangeStartEpochMs', value.start.millisecondsSinceEpoch);
+    _prefs.setInt('exportDataRangeEndEpochMs', value.end.millisecondsSinceEpoch);
     notifyListeners();
   }
   
   List<String> get exportAddableItems {
-    return _exportAddableItems;
+    return _prefs.getStringList('exportAddableItems') ?? [];
   }
 
   set exportAddableItems(List<String> value) {
-    _exportAddableItems = value;
+    _prefs.setStringList('exportAddableItems', value);
     notifyListeners();
   }
   List<String> get exportItems {
-    return _exportItems;
+    return _prefs.getStringList('exportItems') ?? ['timestampUnixMs', 'systolic', 'diastolic', 'pulse', 'notes'];
   }
 
   set exportItems(List<String> value) {
-    _exportItems = value;
+    _prefs.setStringList('exportItems', value);
     notifyListeners();
   }
   
lib/screens/subsettings/export_import_screen.dart
@@ -24,10 +24,12 @@ class ExportImportScreen extends StatelessWidget {
       ),
       body: Consumer<Settings>(builder: (context, settings, child) {
         var exportRange = settings.exportDataRange;
-        String? exportRangeText;
-        if (exportRange != null) {
+        String exportRangeText;
+        if (exportRange.start.millisecondsSinceEpoch != 0 && exportRange.end.millisecondsSinceEpoch != 0) {
           var formatter = DateFormat.yMMMd(AppLocalizations.of(context)!.localeName);
           exportRangeText = '${formatter.format(exportRange.start)} - ${formatter.format(exportRange.end)}';
+        } else {
+          exportRangeText = AppLocalizations.of(context)!.errPleaseSelect;
         }
 
         List<Widget> modeSpecificSettings = [];
@@ -53,7 +55,7 @@ class ExportImportScreen extends StatelessWidget {
                 }
               },
             ),
-            CsvItemsOrderCreator()
+            const CsvItemsOrderCreator()
           ];
         }
 
@@ -67,7 +69,7 @@ class ExportImportScreen extends StatelessWidget {
           ),
           (settings.exportLimitDataRange) ? SettingsTile(
               title: Text(AppLocalizations.of(context)!.exportInterval),
-              description: (exportRangeText != null) ? Text(exportRangeText) : null,
+              description: Text(exportRangeText),
               onPressed: (context) async {
                 var model = Provider.of<BloodPressureModel>(context, listen: false);
                 var newRange = await showDateRangePicker(context: context, firstDate: await model.firstDay, lastDate: await model.lastDay);
@@ -76,7 +78,7 @@ class ExportImportScreen extends StatelessWidget {
                       .showSnackBar(SnackBar(content: Text(AppLocalizations.of(context)!.errNoRangeForExport)));
                   return;
                 }
-                settings.exportDataRange = newRange;
+                settings.exportDataRange = newRange ?? DateTimeRange(start: DateTime.fromMillisecondsSinceEpoch(0), end: DateTime.fromMillisecondsSinceEpoch(0));
 
               }
           ) : const SizedBox.shrink(),
@@ -132,13 +134,13 @@ class ExportImportScreen extends StatelessWidget {
                     onPressed: () async {
                       var settings = Provider.of<Settings>(context, listen: false);
                       var range = settings.exportDataRange;
-                      if (range == null) {
+                      if (range.start.millisecondsSinceEpoch == 0 || range.end.millisecondsSinceEpoch == 0) {
                         ScaffoldMessenger.of(context)
                             .showSnackBar(SnackBar(content: Text(AppLocalizations.of(context)!.errNoRangeForExport)));
                         return;
                       }
 
-                      var entries = await Provider.of<BloodPressureModel>(context, listen: false).getInTimeRange(settings.exportDataRange!.start, settings.exportDataRange!.end);
+                      var entries = await Provider.of<BloodPressureModel>(context, listen: false).getInTimeRange(settings.exportDataRange.start, settings.exportDataRange.end);
                       var fileContents = DataExporter(settings).createFile(entries);
 
                       String filename = 'blood_press_${DateTime.now().toIso8601String()}';