Commit 93707f5

derdilla <derdilla06@gmail.com>
2023-08-06 10:06:33
code improvement
1 parent 730b5f6
Changed files (3)
lib/components/export_item_order.dart
@@ -4,13 +4,12 @@ import 'dart:async';
 import 'package:badges/badges.dart' as badges;
 import 'package:blood_pressure_app/components/consistent_future_builder.dart';
 import 'package:blood_pressure_app/model/export_options.dart';
+import 'package:blood_pressure_app/model/settings_store.dart';
 import 'package:blood_pressure_app/screens/subsettings/export_column_data.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter_gen/gen_l10n/app_localizations.dart';
 import 'package:provider/provider.dart';
 
-import '../model/settings_store.dart';
-
 class ExportItemsCustomizer extends StatefulWidget {
   final List<ExportColumn> shownItems;
   final List<ExportColumn> disabledItems;
@@ -94,11 +93,7 @@ class _ExportItemsCustomizerState extends State<ExportItemsCustomizer> {
         child: IconButton(
           tooltip: AppLocalizations.of(context)!.addExportformat,
           onPressed:() {
-            Navigator.of(context).push(MaterialPageRoute(builder: (context) =>
-              EditExportColumnPage(onValidSubmit: (value) {
-                result.addOrUpdate(value);
-              },)
-            ));
+            Navigator.of(context).push(MaterialPageRoute(builder: (context) => const EditExportColumnPage()));
           },
           icon: const Icon(Icons.add),
         ),
@@ -108,7 +103,8 @@ class _ExportItemsCustomizerState extends State<ExportItemsCustomizer> {
   }
 
   Widget _buildManagePresetsBadge(BuildContext context, ExportConfigurationModel result, {required Widget child}) {
-    final localizations = AppLocalizations.of(context)!;
+    final exportConfigurations = result.exportConfigurations;
+    final exportConfigurationKeys = exportConfigurations.keys.toList();
     return badges.Badge(
       position: badges.BadgePosition.topEnd(top: 3, end: 3),
       badgeStyle: badges.BadgeStyle(
@@ -119,20 +115,13 @@ class _ExportItemsCustomizerState extends State<ExportItemsCustomizer> {
         icon: const Icon(Icons.collections_bookmark),
         itemBuilder: (BuildContext context) {
           return [
-            PopupMenuItem<int>(value: 0, child: Text(localizations.default_)),
-            const PopupMenuItem<int>(value: 1, child: Text('"My Heart" export'))
+            for (var i = 0; i< exportConfigurationKeys.length; i++)
+              PopupMenuItem<int>(value: i, child: Text(exportConfigurationKeys[i])),
           ];
         },
         onSelected: (value) {
-          switch (value) {
-            case 0:
-              result.settings.exportItems = ['timestampUnixMs', 'systolic', 'diastolic', 'pulse', 'notes'];
-              return;
-            case 1:
-              result.settings.exportItems = ['DATUM', 'SYSTOLE', 'DIASTOLE', 'PULS', 'Beschreibung', 'Tags', 'Gewicht', 'Sauerstoffsättigung'];
-              return;
-          }
-          assert(false);
+          final settings = Provider.of<Settings>(context, listen: false);
+          settings.exportItems = exportConfigurations[exportConfigurationKeys[value]]!;
         },
       ),
       child: child,
@@ -163,12 +152,7 @@ class _ExportItemsCustomizerState extends State<ExportItemsCustomizer> {
                   initialInternalName: data.internalName,
                   initialFormatPattern: data.formatPattern,
                   editable: data.editable,
-                  onValidSubmit: (value) async {
-                    final config = await ExportConfigurationModel.get(Provider.of<Settings>(context, listen: false), AppLocalizations.of(context)!);
-                    setState(() {
-                      config.addOrUpdate(value);
-                    });
-                  },
+
                 )
             ));
           },
lib/model/export_options.dart
@@ -17,6 +17,12 @@ class ExportConfigurationModel {
   
   final List<ExportColumn> _availableFormats = [];
 
+  Map<String, List<String>> get exportConfigurations => {
+    // Not fully localized, as potemtial user added configurations can't be localized as well
+    localizations.default_: ['timestampUnixMs', 'systolic', 'diastolic', 'pulse', 'notes'],
+    '"My Heart" export': ['DATUM', 'SYSTOLE', 'DIASTOLE', 'PULS', 'Beschreibung', 'Tags', 'Gewicht', 'Sauerstoffsättigung'],
+  };
+
   ExportConfigurationModel._create(this.settings, this.localizations);
   Future<void> _asyncInit(String? dbPath, bool isFullPath) async {
     dbPath ??= await getDatabasesPath();
lib/screens/subsettings/export_column_data.dart
@@ -1,18 +1,19 @@
 import 'package:blood_pressure_app/model/blood_pressure.dart';
 import 'package:blood_pressure_app/model/export_options.dart';
+import 'package:blood_pressure_app/model/settings_store.dart';
 import 'package:blood_pressure_app/screens/subsettings/export_field_format_documentation.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter_gen/gen_l10n/app_localizations.dart';
+import 'package:provider/provider.dart';
 
 class  EditExportColumnPage extends StatefulWidget {
   final String? initialInternalName;
   final String? initialDisplayName;
   final String? initialFormatPattern;
-  final void Function(ExportColumn) onValidSubmit;
   final bool editable;
   
   const EditExportColumnPage({super.key, this.initialDisplayName, this.initialInternalName, 
-    this.initialFormatPattern, required this.onValidSubmit, this.editable = true});
+    this.initialFormatPattern, this.editable = true});
 
   @override
   State<EditExportColumnPage> createState() => _EditExportColumnPageState();
@@ -162,12 +163,14 @@ class _EditExportColumnPageState extends State<EditExportColumnPage> {
                         label: Text(localizations.btnSave),
                         onPressed: (widget.editable) ? (() async {
                           if (_formKey.currentState?.validate() ?? false) {
-                            widget.onValidSubmit(ExportColumn(
+                            final settings = Provider.of<Settings>(context, listen: false);
+                            final navigator = Navigator.of(context);
+                            (await ExportConfigurationModel.get(settings, localizations)).addOrUpdate(ExportColumn(
                                 internalName: _internalName!,
                                 columnTitle: _displayName!,
                                 formatPattern: _formatPattern!
                             ));
-                            Navigator.of(context).pop();
+                            navigator.pop();
                           }
                         }) : null,
                       )