Commit 080f16d

derdilla <82763757+NobodyForNothing@users.noreply.github.com>
2023-09-24 13:38:36
make warn banner more helpful
Signed-off-by: derdilla <82763757+NobodyForNothing@users.noreply.github.com>
1 parent 756aef1
Changed files (3)
lib/model/export_options.dart
@@ -1,5 +1,6 @@
 import 'dart:collection';
 
+import 'package:blood_pressure_app/main.dart';
 import 'package:blood_pressure_app/model/blood_pressure.dart';
 import 'package:blood_pressure_app/model/export_import.dart';
 import 'package:blood_pressure_app/model/settings_store.dart';
@@ -282,9 +283,23 @@ class ExportColumn {
 }
 
 enum RowDataFieldType {
-  timestamp,
-  sys,
-  dia,
-  pul,
-  notes
+  timestamp, sys, dia, pul, notes;
+
+  @override
+  String toString() {
+    switch(index) {
+      case 0:
+        return gLocalizations.timestamp;
+      case 1:
+        return gLocalizations.sysLong;
+      case 2:
+        return gLocalizations.diaLong;
+      case 3:
+        return gLocalizations.pulLong;
+      case 4:
+        return gLocalizations.notes;
+      default:
+        return "unknown";
+    };
+  }
 }
\ No newline at end of file
lib/screens/subsettings/export_import_screen.dart
@@ -214,7 +214,8 @@ class _ExportFieldCustomisationSettingState
                 : settings.exportItemsPdf;
 
             final formats = configurationModel.availableFormats.toSet();
-            List<ExportColumn> activeFields = configurationModel.getActiveExportColumns(settings.exportFormat);
+            List<ExportColumn> activeFields = configurationModel
+                .getActiveExportColumns(settings.exportFormat);
             List<ExportColumn> hiddenFields = [];
             for (final internalName in exportItems) {
               formats.removeWhere((e) => e.internalName == internalName);
@@ -327,51 +328,50 @@ class _ExportWarnBannerState extends State<ExportWarnBanner> {
   @override
   Widget build(BuildContext context) {
     final localizations = AppLocalizations.of(context)!;
-    _future = ExportConfigurationModel.get(Provider.of<Settings>(context, listen: false), localizations);
+    _future = ExportConfigurationModel.get(
+        Provider.of<Settings>(context, listen: false), localizations);
     return Consumer<Settings>(builder: (context, settings, child) {
+      _showWarnBanner = true; // when settings change, warn banner should reset as well
       return ConsistentFutureBuilder(
           future: _future,
           onData: (context, configurationModel) {
             String? message;
-            final exportItems = (settings.exportFormat == ExportFormat.csv)
-                ? settings.exportItemsCsv
-                : settings.exportItemsPdf;
             final exportCustomEntries =
                 (settings.exportFormat == ExportFormat.csv)
                     ? settings.exportCustomEntriesCsv
                     : settings.exportCustomEntriesPdf;
-            final exportFormats = configurationModel.getActiveExportColumns(settings.exportFormat)
+            final exportFormats = configurationModel
+                .getActiveExportColumns(settings.exportFormat)
                 .map((e) => e.parsableFormat);
 
+            print(exportFormats.join(','));
+            var missingAttributes = {
+              RowDataFieldType.timestamp,
+              RowDataFieldType.sys,
+              RowDataFieldType.dia,
+              RowDataFieldType.pul,
+              RowDataFieldType.notes
+            };
+            missingAttributes.removeWhere((e) => exportFormats.contains(e));
+            print(missingAttributes);
             if (_showWarnBanner &&
                     ![ExportFormat.csv, ExportFormat.db]
                         .contains(settings.exportFormat) ||
                 settings.exportCsvHeadline == false ||
-                exportCustomEntries && exportFormats.where((e) => e == RowDataFieldType.timestamp).isEmpty ||
+                exportCustomEntries &&
+                    missingAttributes.contains(RowDataFieldType.timestamp) ||
                 ![',', '|'].contains(settings.csvFieldDelimiter) ||
                 !['"', '\''].contains(settings.csvTextDelimiter)) {
-              print(exportFormats.join(','));
               message = localizations.exportWarnConfigNotImportable;
-            } else if (_showWarnBanner &&
-                exportCustomEntries &&
-                !([RowDataFieldType.sys, RowDataFieldType.dia, RowDataFieldType.pul, RowDataFieldType.notes]
-                    .every((i) => exportFormats.contains(i)))) {
-              var missingAttributes = {
-                'systolic',
-                'diastolic',
-                'pulse',
-                'notes'
-              };
-              missingAttributes.removeWhere((e) => exportItems.contains(e));
-
+            } else if (_showWarnBanner && exportCustomEntries && missingAttributes.isNotEmpty) {
               message = localizations.exportWarnNotEveryFieldExported(
-                  missingAttributes.length, missingAttributes.toString());
+                  missingAttributes.length, missingAttributes.join(', '));
             }
 
             if (message != null) {
               return MaterialBanner(
                   padding: const EdgeInsets.all(20),
-                  content: Text(message!),
+                  content: Text(message),
                   actions: [
                     TextButton(
                         onPressed: () {
lib/main.dart
@@ -6,6 +6,8 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart';
 import 'package:flutter_localizations/flutter_localizations.dart';
 import 'package:provider/provider.dart';
 
+late AppLocalizations gLocalizations;
+
 void main() async {
   WidgetsFlutterBinding.ensureInitialized();
   // 2 different db files
@@ -32,7 +34,10 @@ class AppRoot extends StatelessWidget {
 
       return MaterialApp(
         title: 'Blood Pressure App',
-        onGenerateTitle: (context) => AppLocalizations.of(context)!.title,
+        onGenerateTitle: (context) {
+          gLocalizations = AppLocalizations.of(context)!;
+          return gLocalizations.title;
+        },
         theme: ThemeData(
             colorScheme: ColorScheme.fromSeed(
                 seedColor: settings.accentColor,