Commit 583eb2d

derdilla <derdilla06@gmail.com>
2023-07-18 12:34:15
code cleanup
1 parent f7cd0a6
lib/components/display_interval_picker.dart
@@ -59,15 +59,15 @@ class IntervalPicker extends StatelessWidget {
             ),
             Expanded(
               flex: 40,
-              child: DropdownButton<int>(
+              child: DropdownButton<TimeStep>(
                 value: settings.graphStepSize,
                 isExpanded: true,
-                onChanged: (int? value) {
+                onChanged: (TimeStep? value) {
                   if (value != null) {
                     settings.changeStepSize(value);
                   }
                 },
-                items: TimeStep.options.map<DropdownMenuItem<int>>((v) {
+                items: TimeStep.options.map<DropdownMenuItem<TimeStep>>((v) {
                   return DropdownMenuItem(value: v, child: Text(TimeStep.getName(v, context)));
                 }).toList(),
               ),
lib/model/blood_pressure_analyzer.dart
@@ -28,7 +28,6 @@ class BloodPressureAnalyser {
 
   int get minSys => _safeResult(() => _nonNullSys.reduce(min), (r) => r.systolic);
 
-  //TODO make first and last day nullable
   DateTime? get firstDay {
     if (_records.isEmpty) return null;
     _records.sort((a, b) => a.creationTime.compareTo(b.creationTime));
lib/model/ram_only_implementations.dart
@@ -51,7 +51,7 @@ class RamSettings extends ChangeNotifier implements Settings {
   DateTime? _displayDataStart;
   bool _followSystemDarkMode = true;
   double _graphLineThickness = 3;
-  int _graphStepSize = TimeStep.day;
+  TimeStep _graphStepSize = TimeStep.day;
   double _iconSize = 30;
   MaterialColor _pulColor = Colors.pink;
   MaterialColor _sysColor = Colors.pink;
@@ -65,9 +65,7 @@ class RamSettings extends ChangeNotifier implements Settings {
   List<String> _exportAddableItems = ['isoUTCTime'];
   bool _exportCsvHeadline = true;
   bool _exportCustomEntries = false;
-  DateTimeRange _exportDataRange = DateTimeRange(start: DateTime.fromMillisecondsSinceEpoch(0), end: DateTime.fromMillisecondsSinceEpoch(0));
   List<String> _exportItems = ['timestampUnixMs', 'systolic', 'diastolic', 'pulse', 'notes'];
-  bool _exportLimitDataRange = false;
   MimeType _exportMimeType = MimeType.csv;
   String _defaultExportDir = '';
   bool _exportAfterEveryEntry = false;
@@ -206,10 +204,10 @@ class RamSettings extends ChangeNotifier implements Settings {
   }
 
   @override
-  int get graphStepSize => _graphStepSize;
+  TimeStep get graphStepSize => _graphStepSize;
 
   @override
-  set graphStepSize(int value) {
+  set graphStepSize(TimeStep value) {
     _graphStepSize = value;
     notifyListeners();
   }
@@ -320,15 +318,6 @@ class RamSettings extends ChangeNotifier implements Settings {
     notifyListeners();
   }
 
-  @override
-  DateTimeRange get exportDataRange => _exportDataRange;
-
-  @override
-  set exportDataRange(DateTimeRange value) {
-    _exportDataRange = value;
-    notifyListeners();
-  }
-
   @override
   List<String> get exportItems => _exportItems;
 
@@ -338,15 +327,6 @@ class RamSettings extends ChangeNotifier implements Settings {
     notifyListeners();
   }
 
-  @override
-  bool get exportLimitDataRange => _exportLimitDataRange;
-
-  @override
-  set exportLimitDataRange(bool value) {
-    _exportLimitDataRange = value;
-    notifyListeners();
-  }
-
   @override
   MimeType get exportMimeType => _exportMimeType;
 
@@ -384,7 +364,7 @@ class RamSettings extends ChangeNotifier implements Settings {
   }
 
   @override
-  void changeStepSize(int value) {
+  void changeStepSize(TimeStep value) {
     graphStepSize = value;
     final newInterval = getMostRecentDisplayIntervall();
     displayDataStart = newInterval[0];
@@ -401,6 +381,7 @@ class RamSettings extends ChangeNotifier implements Settings {
         displayDataEnd = oldEnd.copyWith(day: oldEnd.day + directionalStep);
         break;
       case TimeStep.week:
+      case TimeStep.last7Days:
         displayDataStart = oldStart.copyWith(day: oldStart.day + directionalStep * 7);
         displayDataEnd = oldEnd.copyWith(day: oldEnd.day + directionalStep * 7);
         break;
@@ -416,6 +397,9 @@ class RamSettings extends ChangeNotifier implements Settings {
         displayDataStart = DateTime.fromMillisecondsSinceEpoch(0);
         displayDataEnd = DateTime.now();
         break;
+      case TimeStep.last30Days:
+        displayDataStart = oldStart.copyWith(day: oldStart.day + directionalStep * 30);
+        displayDataEnd = oldEnd.copyWith(day: oldEnd.day + directionalStep * 30);
     }
   }
 
@@ -438,6 +422,12 @@ class RamSettings extends ChangeNotifier implements Settings {
       case TimeStep.lifetime:
         final start = DateTime.fromMillisecondsSinceEpoch(0);
         return [start, now];
+      case TimeStep.last7Days:
+        final start = now.copyWith(day: now.day-7);
+        return [start, now];
+      case TimeStep.last30Days:
+        final start = now.copyWith(day: now.day-30);
+        return [start, now];
       default:
         assert(false);
         final start = DateTime.fromMillisecondsSinceEpoch(0);
lib/model/settings_store.dart
@@ -49,16 +49,58 @@ class Settings extends ChangeNotifier {
     return;
   }
 
-  int get graphStepSize {
-    return _prefs.getInt('graphStepSize') ?? TimeStep.day;
+  TimeStep get graphStepSize {
+    int stepInt = _prefs.getInt('graphStepSize') ?? 0;
+    switch (stepInt) {
+      case 0:
+        return TimeStep.day;
+      case 1:
+        return TimeStep.month;
+      case 2:
+        return TimeStep.year;
+      case 3:
+        return TimeStep.lifetime;
+      case 4:
+        return TimeStep.week;
+      case 5:
+        return TimeStep.last7Days;
+      case 6:
+        return TimeStep.last30Days;
+    }
+    assert(false);
+    return TimeStep.day;
   }
 
-  set graphStepSize(int newStepSize) {
-    _prefs.setInt('graphStepSize', newStepSize);
+  set graphStepSize(TimeStep newStepSize) {
+    switch (newStepSize) {
+      case TimeStep.day:
+        _prefs.setInt('graphStepSize', 0);
+        break;
+      case TimeStep.month:
+        _prefs.setInt('graphStepSize', 1);
+        break;
+      case TimeStep.year:
+        _prefs.setInt('graphStepSize', 2);
+        break;
+      case TimeStep.lifetime:
+        _prefs.setInt('graphStepSize', 3);
+        break;
+      case TimeStep.week:
+        _prefs.setInt('graphStepSize', 4);
+        break;
+      case TimeStep.last7Days:
+        _prefs.setInt('graphStepSize', 5);
+        break;
+      case TimeStep.last30Days:
+        _prefs.setInt('graphStepSize', 6);
+        break;
+      default:
+        assert(false);
+    }
     notifyListeners();
   }
 
-  void changeStepSize(int value) {
+  void changeStepSize(TimeStep value) {
     graphStepSize = value;
     final newInterval = getMostRecentDisplayIntervall();
     displayDataStart = newInterval[0];
@@ -434,38 +476,34 @@ class Settings extends ChangeNotifier {
   }
 }
 
-class TimeStep { // TODO: replace with enum
-  static const options = [0, 4, 1, 2, 3, 5, 6];
-
-  static const day = 0;
-  static const month = 1;
-  static const year = 2;
-  static const lifetime = 3;
-  static const week = 4;
-  static const last7Days = 5;
-  static const last30Days = 6;
+enum TimeStep {
+  day,
+  month,
+  year,
+  lifetime,
+  week,
+  last7Days,
+  last30Days;
 
-  TimeStep._create();
+  static const options = [TimeStep.day, TimeStep.week, TimeStep.month, TimeStep.year, TimeStep.lifetime, TimeStep.last7Days, TimeStep.last30Days];
 
-  static String getName(int opt, BuildContext context) {
+  static String getName(TimeStep opt, BuildContext context) {
     switch (opt) {
-      case day:
+      case TimeStep.day:
         return AppLocalizations.of(context)!.day;
-      case month:
+      case TimeStep.month:
         return AppLocalizations.of(context)!.month;
-      case year:
+      case TimeStep.year:
         return AppLocalizations.of(context)!.year;
-      case lifetime:
+      case TimeStep.lifetime:
         return AppLocalizations.of(context)!.lifetime;
-      case week:
+      case TimeStep.week:
         return AppLocalizations.of(context)!.week;
-      case last7Days:
+      case TimeStep.last7Days:
         return AppLocalizations.of(context)!.last7Days;
-      case last30Days:
+      case TimeStep.last30Days:
         return AppLocalizations.of(context)!.last30Days;
     }
-    assert(false);
-    return '-';
   }
 }
 
lib/screens/statistics.dart
@@ -170,8 +170,8 @@ class Statistic extends StatelessWidget {
 
   @override
   Widget build(BuildContext context) {
+    const double top = 20;
     double sides = 20;
-    double top = 20;
     double padding = 20;
     if (smallEdges) {
       sides = 0;
test/model/settings_test.dart
@@ -1,7 +1,6 @@
 import 'package:blood_pressure_app/model/ram_only_implementations.dart';
 import 'package:blood_pressure_app/model/settings_store.dart';
 import 'package:file_saver/file_saver.dart';
-import 'package:flutter/material.dart';
 import 'package:flutter_test/flutter_test.dart';
 import 'package:shared_preferences/shared_preferences.dart';
 import 'package:sqflite_common_ffi/sqflite_ffi.dart';
@@ -44,8 +43,6 @@ void main() {
       expect(s.exportItems, ['timestampUnixMs', 'systolic', 'diastolic', 'pulse', 'notes']);
       expect(s.exportAddableItems, ['isoUTCTime']);
       expect(s.exportCsvHeadline, true);
-      expect(s.exportDataRange.start.millisecondsSinceEpoch, 0);
-      expect(s.exportLimitDataRange, false);
       expect(s.exportMimeType, MimeType.csv);
       expect(s.defaultExportDir.isEmpty, true);
       expect(s.exportAfterEveryEntry, false);
@@ -90,7 +87,6 @@ void main() {
       s.exportAddableItems = ['timestampUnixMs'];
       s.exportItems = ['systolic', 'diastolic', 'pulse', 'notes', 'isoUTCTime'];
       s.exportCsvHeadline = false;
-      s.exportLimitDataRange = true;
       s.exportMimeType = MimeType.pdf;
       s.defaultExportDir = '/storage/emulated/0/Android/data/com.derdilla.bloodPressureApp/files/file.csv';
       s.exportAfterEveryEntry = true;
@@ -118,7 +114,6 @@ void main() {
       expect(s.exportItems, ['systolic', 'diastolic', 'pulse', 'notes', 'isoUTCTime']);
       expect(s.exportAddableItems, ['timestampUnixMs']);
       expect(s.exportCsvHeadline, false);
-      expect(s.exportLimitDataRange, true);
       expect(s.exportMimeType, MimeType.pdf);
       expect(s.defaultExportDir, '/storage/emulated/0/Android/data/com.derdilla.bloodPressureApp/files/file.csv');
       expect(s.exportAfterEveryEntry, true);
@@ -157,14 +152,12 @@ void main() {
       s.exportAddableItems = ['timestampUnixMs'];
       s.exportItems = ['systolic', 'diastolic', 'pulse', 'notes', 'isoUTCTime'];
       s.exportCsvHeadline = false;
-      s.exportDataRange = DateTimeRange(start: DateTime.fromMillisecondsSinceEpoch(20), end: DateTime.now());
-      s.exportLimitDataRange = true;
       s.exportMimeType = MimeType.pdf;
       s.defaultExportDir = '/storage/emulated/0/Android/data/com.derdilla.bloodPressureApp/files/file.csv';
       s.exportAfterEveryEntry = true;
       s.allowMissingValues = true;
 
-      expect(i, 30);
+      expect(i, 28);
     });
   });
 
@@ -202,8 +195,6 @@ void main() {
       expect(s.exportItems, ['timestampUnixMs', 'systolic', 'diastolic', 'pulse', 'notes']);
       expect(s.exportAddableItems, ['isoUTCTime']);
       expect(s.exportCsvHeadline, true);
-      expect(s.exportDataRange.start.millisecondsSinceEpoch, 0);
-      expect(s.exportLimitDataRange, false);
       expect(s.exportMimeType, MimeType.csv);
       expect(s.defaultExportDir.isEmpty, true);
       expect(s.exportAfterEveryEntry, false);
@@ -248,7 +239,6 @@ void main() {
       s.exportAddableItems = ['timestampUnixMs'];
       s.exportItems = ['systolic', 'diastolic', 'pulse', 'notes', 'isoUTCTime'];
       s.exportCsvHeadline = false;
-      s.exportLimitDataRange = true;
       s.exportMimeType = MimeType.pdf;
       s.defaultExportDir = '/storage/emulated/0/Android/data/com.derdilla.bloodPressureApp/files/file.csv';
       s.exportAfterEveryEntry = true;
@@ -276,7 +266,6 @@ void main() {
       expect(s.exportItems, ['systolic', 'diastolic', 'pulse', 'notes', 'isoUTCTime']);
       expect(s.exportAddableItems, ['timestampUnixMs']);
       expect(s.exportCsvHeadline, false);
-      expect(s.exportLimitDataRange, true);
       expect(s.exportMimeType, MimeType.pdf);
       expect(s.defaultExportDir, '/storage/emulated/0/Android/data/com.derdilla.bloodPressureApp/files/file.csv');
       expect(s.exportAfterEveryEntry, true);
@@ -316,14 +305,12 @@ void main() {
       s.exportAddableItems = ['timestampUnixMs'];
       s.exportItems = ['systolic', 'diastolic', 'pulse', 'notes', 'isoUTCTime'];
       s.exportCsvHeadline = false;
-      s.exportDataRange = DateTimeRange(start: DateTime.fromMillisecondsSinceEpoch(20), end: DateTime.now());
-      s.exportLimitDataRange = true;
       s.exportMimeType = MimeType.pdf;
       s.defaultExportDir = '/storage/emulated/0/Android/data/com.derdilla.bloodPressureApp/files/file.csv';
       s.exportAfterEveryEntry = true;
       s.allowMissingValues = true;
 
-      expect(i, 30);
+      expect(i, 28);
     });
   });
 }