Commit 8e625da

derdilla <82763757+NobodyForNothing@users.noreply.github.com>
2024-07-05 08:34:11
show critical error screen on more errors
Signed-off-by: derdilla <82763757+NobodyForNothing@users.noreply.github.com>
1 parent ce80953
Changed files (3)
app
lib
app/lib/data_util/entry_context.dart
@@ -3,6 +3,7 @@ import 'package:blood_pressure_app/features/export_import/export_button_bar.dart
 import 'package:blood_pressure_app/features/input/add_measurement_dialoge.dart';
 import 'package:blood_pressure_app/logging.dart';
 import 'package:blood_pressure_app/model/storage/storage.dart';
+import 'package:blood_pressure_app/screens/error_reporting_screen.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter_bloc/flutter_bloc.dart' hide ProviderNotFoundException;
 import 'package:flutter_gen/gen_l10n/app_localizations.dart';
@@ -54,6 +55,8 @@ extension EntryUtils on BuildContext {
       }
     } on ProviderNotFoundException {
       Log.err('createEntry($initial) was called from a context without Provider.');
+    } catch (e, stack) {
+      await ErrorReporting.reportCriticalError('Error opening add measurement dialoge', '$e\n$stack',);
     }
   }
 
app/lib/model/blood_pressure/update_legacy_entries.dart
@@ -20,7 +20,7 @@ Future<void> updateLegacyEntries(
   hds.NoteRepository noteRepo,
   hds.MedicineRepository medRepo,
   hds.MedicineIntakeRepository intakeRepo,
-) async { // TODO: test
+) async {
   // Migrate old meds still in use and old intakes
   try {
     if (settings.medications.isNotEmpty) {
app/lib/app.dart
@@ -6,6 +6,7 @@ import 'package:blood_pressure_app/model/export_import/export_configuration.dart
 import 'package:blood_pressure_app/model/storage/db/config_db.dart';
 import 'package:blood_pressure_app/model/storage/export_columns_store.dart';
 import 'package:blood_pressure_app/model/storage/storage.dart';
+import 'package:blood_pressure_app/screens/error_reporting_screen.dart';
 import 'package:blood_pressure_app/screens/home_screen.dart';
 import 'package:blood_pressure_app/screens/loading_screen.dart';
 import 'package:flutter/material.dart';
@@ -86,57 +87,76 @@ class _AppState extends State<App> {
       } on FileSystemException { }
     }
 
-    _configDB = await ConfigDB.open();
-    final configDao = ConfigDao(_configDB!);
-
-    _settings ??= await configDao.loadSettings(0);
-    _exportSettings ??= await configDao.loadExportSettings(0);
-    _csvExportSettings ??= await configDao.loadCsvExportSettings(0);
-    _pdfExportSettings ??= await configDao.loadPdfExportSettings(0);
-    _intervallStorageManager ??= await IntervallStoreManager.load(configDao, 0);
-    _exportColumnsManager ??= await configDao.loadExportColumnsManager(0);
-
-    _entryDB = await openDatabase(
-      join(await getDatabasesPath(), 'bp.db'),
-    );
-    final db = await HealthDataStore.load(_entryDB!);
-    final bpRepo = db.bpRepo;
-    final noteRepo = db.noteRepo;
-    final medRepo = db.medRepo;
-    final intakeRepo = db.intakeRepo;
-
-    await updateLegacyEntries(
-      _settings!,
-      bpRepo,
-      noteRepo,
-      medRepo,
-      intakeRepo,
-    );
+    try {
+      _configDB = await ConfigDB.open();
+      final configDao = ConfigDao(_configDB!);
+
+      _settings ??= await configDao.loadSettings(0);
+      _exportSettings ??= await configDao.loadExportSettings(0);
+      _csvExportSettings ??= await configDao.loadCsvExportSettings(0);
+      _pdfExportSettings ??= await configDao.loadPdfExportSettings(0);
+      _intervallStorageManager ??= await IntervallStoreManager.load(configDao, 0);
+      _exportColumnsManager ??= await configDao.loadExportColumnsManager(0);
+    } catch (e, stack) {
+      await ErrorReporting.reportCriticalError('Error loading config db', '$e\n$stack',);
+    }
 
-    // update logic
-    if (_settings!.lastVersion == 0) {
-      await updateLegacySettings(_settings!, _exportSettings!, _csvExportSettings!, _pdfExportSettings!, _intervallStorageManager!);
-      await updateLegacyExport(_configDB!, _exportColumnsManager!);
+    late BloodPressureRepository bpRepo;
+    late NoteRepository noteRepo;
+    late MedicineRepository medRepo;
+    late MedicineIntakeRepository intakeRepo;
+
+    try {
+      _entryDB = await openDatabase(
+        join(await getDatabasesPath(), 'bp.db'),
+      );
+      final db = await HealthDataStore.load(_entryDB!);
+      bpRepo = db.bpRepo;
+      noteRepo = db.noteRepo;
+      medRepo = db.medRepo;
+      intakeRepo = db.intakeRepo;
+    } catch (e, stack) {
+      await ErrorReporting.reportCriticalError('Error loading entry db', '$e\n$stack',);
+    }
 
-      _settings!.lastVersion = 30;
-      if (_exportSettings!.exportAfterEveryEntry) {
-        await Fluttertoast.showToast(
-          msg: r'Please review your export settings to ensure everything works as expected.',
-        );
+    try {
+      await updateLegacyEntries(
+        _settings!,
+        bpRepo,
+        noteRepo,
+        medRepo,
+        intakeRepo,
+      );
+
+      // update logic
+      if (_settings!.lastVersion == 0) {
+        await updateLegacySettings(_settings!, _exportSettings!, _csvExportSettings!, _pdfExportSettings!, _intervallStorageManager!);
+        await updateLegacyExport(_configDB!, _exportColumnsManager!);
+
+        _settings!.lastVersion = 30;
+        if (_exportSettings!.exportAfterEveryEntry) {
+          await Fluttertoast.showToast(
+            msg: r'Please review your export settings to ensure everything works as expected.',
+          );
+        }
       }
-    }
-    if (_settings!.lastVersion == 30) {
-      if (_pdfExportSettings!.exportFieldsConfiguration.activePreset == ExportImportPreset.bloodPressureApp) {
-        _pdfExportSettings!.exportFieldsConfiguration.activePreset = ExportImportPreset.bloodPressureAppPdf;
+      if (_settings!.lastVersion == 30) {
+        if (_pdfExportSettings!.exportFieldsConfiguration.activePreset == ExportImportPreset.bloodPressureApp) {
+          _pdfExportSettings!.exportFieldsConfiguration.activePreset = ExportImportPreset.bloodPressureAppPdf;
+        }
+        _settings!.lastVersion = 31;
+      }
+      if (_settings!.allowMissingValues && _settings!.validateInputs){
+        _settings!.validateInputs = false;
       }
-      _settings!.lastVersion = 31;
-    }
-    if (_settings!.allowMissingValues && _settings!.validateInputs) _settings!.validateInputs = false;
 
-    _settings!.lastVersion = int.parse((await PackageInfo.fromPlatform()).buildNumber);
+      _settings!.lastVersion = int.parse((await PackageInfo.fromPlatform()).buildNumber);
 
-    // Reset the step size intervall to current on startup
-    _intervallStorageManager!.mainPage.setToMostRecentIntervall();
+      // Reset the step size intervall to current on startup
+      _intervallStorageManager!.mainPage.setToMostRecentIntervall();
+    } catch (e, stack) {
+      await ErrorReporting.reportCriticalError('Error performing upgrades:', '$e\n$stack',);
+    }
 
     _loadedChild = MultiRepositoryProvider(
       providers: [