Commit 70f10b3

derdilla <derdilla06@gmail.com>
2023-07-16 09:05:50
replace export range selection with application wide option
1 parent 7f35b00
Changed files (4)
lib/l10n/app_en.arb
@@ -47,8 +47,6 @@
   "@errNotEnoughDataToGraph": {},
   "errNoData": "no data",
   "@errNoData": {},
-  "errNoRangeForExport": "You need to specify a range in which data is exported.",
-  "@errNoRangeForExport": {},
   "errPleaseSelect": "please select",
   "@errPleaseSelect": {},
   "errWrongImportFormat": "You can only import files in CSV and SQLite database format.",
@@ -179,8 +177,6 @@
   "@exportAfterEveryInput": {},
   "exportAfterEveryInputDesc": "Not recommended (file explosion)",
   "@exportAfterEveryInputDesc": {},
-  "exportLimitDataRange": "Limit data range",
-  "@exportLimitDataRange": {},
   "exportInterval": "Data range",
   "@exportInterval": {},
   "exportFormat": "Export format",
lib/model/export_import.dart
@@ -1,5 +1,4 @@
 
-import 'dart:collection';
 import 'dart:convert';
 import 'dart:io';
 import 'dart:typed_data';
@@ -224,17 +223,8 @@ class Exporter {
     final messenger = ScaffoldMessenger.of(context);
     final localizations = AppLocalizations.of(context);
 
-    final UnmodifiableListView<BloodPressureRecord> entries;
-    if (settings.exportLimitDataRange) {
-      var range = settings.exportDataRange;
-      if (range.start.millisecondsSinceEpoch == 0 || range.end.millisecondsSinceEpoch == 0) {
-        messenger.showSnackBar(SnackBar(content: Text(localizations!.errNoRangeForExport)));
-        return;
-      }
-      entries = await Provider.of<BloodPressureModel>(context, listen: false).getInTimeRange(settings.exportDataRange.start, settings.exportDataRange.end);
-    } else {
-      entries = await Provider.of<BloodPressureModel>(context, listen: false).all;
-    }
+    final entries = await Provider.of<BloodPressureModel>(context, listen: false)
+        .getInTimeRange(settings.displayDataStart, settings.displayDataEnd);
     var fileContents = await ExportFileCreator(settings).createFile(entries);
 
     String filename = 'blood_press_${DateTime.now().toIso8601String()}';
lib/model/settings_store.dart
@@ -33,6 +33,15 @@ class Settings extends ChangeNotifier {
     if (keys.contains('overrideWarnValues')) {
       toAwait.add(_prefs.remove('overrideWarnValues'));
     }
+    if (keys.contains('exportLimitDataRange')) {
+      toAwait.add(_prefs.remove('exportLimitDataRange'));
+    }
+    if (keys.contains('exportDataRangeStartEpochMs')) {
+      toAwait.add(_prefs.remove('exportDataRangeStartEpochMs'));
+    }
+    if (keys.contains('exportDataRangeEndEpochMs')) {
+      toAwait.add(_prefs.remove('exportDataRangeEndEpochMs'));
+    }
 
     for (var e in toAwait) {
       await e;
@@ -372,27 +381,6 @@ class Settings extends ChangeNotifier {
     notifyListeners();
   }
 
-  bool get exportLimitDataRange {
-    return _prefs.getBool('exportLimitDataRange') ?? false;
-  }
-
-  set exportLimitDataRange(bool value) {
-    _prefs.setBool('exportLimitDataRange', value);
-    notifyListeners();
-  }
-
-  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) {
-    _prefs.setInt('exportDataRangeStartEpochMs', value.start.millisecondsSinceEpoch);
-    _prefs.setInt('exportDataRangeEndEpochMs', value.end.millisecondsSinceEpoch);
-    notifyListeners();
-  }
-
   bool get exportCustomEntries {
     return _prefs.getBool('exportCustomEntries') ?? false;
   }
lib/screens/subsettings/export_import_screen.dart
@@ -1,14 +1,13 @@
+import 'package:blood_pressure_app/components/display_interval_picker.dart';
 import 'package:blood_pressure_app/components/settings_widgets.dart';
-import 'package:blood_pressure_app/model/blood_pressure.dart';
-import 'package:blood_pressure_app/model/blood_pressure_analyzer.dart';
 import 'package:blood_pressure_app/model/export_import.dart';
 import 'package:blood_pressure_app/model/settings_store.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter_gen/gen_l10n/app_localizations.dart';
-import 'package:intl/intl.dart';
 import 'package:jsaver/jSaver.dart';
 import 'package:provider/provider.dart';
 
+// TODO: control if warn messages work
 class ExportImportScreen extends StatelessWidget {
   const ExportImportScreen({super.key});
 
@@ -26,6 +25,11 @@ class ExportImportScreen extends StatelessWidget {
             child: Column(
               children: [
                 const ExportWarnBanner(),
+                const SizedBox(height: 15,),
+                Opacity(
+                  opacity: (settings.exportFormat == ExportFormat.db) ? 0.5 : 1, // TODO: centralize when restyle
+                  child: const IntervalPicker(),
+                ),
                 SettingsTile(
                   title: Text(AppLocalizations.of(context)!.exportDir),
                   description: Text(settings.defaultExportDir),
@@ -57,7 +61,6 @@ class ExportImportScreen extends StatelessWidget {
                     }
                   },
                 ),
-                const ExportDataRangeSettings(),
                 InputSettingsTile(
                   title: Text(AppLocalizations.of(context)!.fieldDelimiter),
                   inputWidth: 40,
@@ -100,58 +103,6 @@ class ExportImportScreen extends StatelessWidget {
   }
 }
 
-class ExportDataRangeSettings extends StatelessWidget {
-  const ExportDataRangeSettings({super.key});
-
-  @override
-  Widget build(BuildContext context) {
-    return Consumer<Settings>(builder: (context, settings, child) {
-      var exportRange = settings.exportDataRange;
-      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;
-      }
-      return Column(
-        children: [
-          SwitchSettingsTile(
-            title: Text(AppLocalizations.of(context)!.exportLimitDataRange),
-            initialValue: settings.exportLimitDataRange,
-            onToggle: (value) {
-              settings.exportLimitDataRange = value;
-            },
-            disabled: settings.exportFormat == ExportFormat.db,
-          ),
-          SettingsTile(
-            title: Text(AppLocalizations.of(context)!.exportInterval),
-            description: Text(exportRangeText),
-            disabled: !settings.exportLimitDataRange || settings.exportFormat == ExportFormat.db,
-            onPressed: (context) async {
-              var model = Provider.of<BloodPressureModel>(context, listen: false);
-              var analyzer = BloodPressureAnalyser(await model.all);
-              if(!context.mounted) return;
-              var newRange = await showDateRangePicker(
-                  context: context,
-                  firstDate: analyzer.firstDay??DateTime.fromMillisecondsSinceEpoch(0),
-                  lastDate: analyzer.lastDay??DateTime.now()
-              );
-              if (newRange == null && context.mounted) {
-                ScaffoldMessenger.of(context)
-                    .showSnackBar(SnackBar(content: Text(AppLocalizations.of(context)!.errNoRangeForExport)));
-                return;
-              }
-              settings.exportDataRange = newRange ?? DateTimeRange(start: DateTime.fromMillisecondsSinceEpoch(0), end: DateTime.fromMillisecondsSinceEpoch(0));
-            }
-          ),
-        ],
-      );
-    });
-  }
-
-}
-
 class ExportFieldCustomisationSetting extends StatelessWidget {
   const ExportFieldCustomisationSetting({super.key});