Commit d2a7b6c

derdilla <derdilla06@gmail.com>
2023-08-09 16:13:41
review
1 parent 93707f5
lib/components/export_item_order.dart
@@ -34,13 +34,14 @@ class _ExportItemsCustomizerState extends State<ExportItemsCustomizer> {
       onData: (BuildContext context, ExportConfigurationModel result) {
         return _buildAddItemBadge(context, result,
           child: _buildManagePresetsBadge(context, result,
-            child:_buildList(context))
+            child:_buildList(context, result)
+          )
         );
       },
     );
   }
 
-  Container _buildList(BuildContext context) {
+  Container _buildList(BuildContext context, ExportConfigurationModel exportConfigModel) {
     return Container(
         margin: const EdgeInsets.all(25),
         padding: const EdgeInsets.all(20),
@@ -58,7 +59,7 @@ class _ExportItemsCustomizerState extends State<ExportItemsCustomizer> {
               ListTile(
                   key: Key('l_${widget.shownItems[i].internalName}'),
                   title: Text(widget.shownItems[i].columnTitle),
-                  trailing: _buildListItemTrailing( context, widget.shownItems[i]),
+                  trailing: _buildListItemTrailing( context, widget.shownItems[i], exportConfigModel),
                   contentPadding: EdgeInsets.zero
               ),
             _buildListSectionDivider(context),
@@ -70,7 +71,7 @@ class _ExportItemsCustomizerState extends State<ExportItemsCustomizer> {
                   opacity: 0.7,
                   child: Text(widget.disabledItems[i].columnTitle),
                 ),
-                trailing: _buildListItemTrailing(context, widget.disabledItems[i]),
+                trailing: _buildListItemTrailing(context, widget.disabledItems[i], exportConfigModel),
                 contentPadding: EdgeInsets.zero
               ),
           ],
@@ -128,14 +129,13 @@ class _ExportItemsCustomizerState extends State<ExportItemsCustomizer> {
     );
   }
 
-  Widget _buildListItemTrailing(BuildContext context, ExportColumn data) {
+  Widget _buildListItemTrailing(BuildContext context, ExportColumn data, ExportConfigurationModel config) {
     return Row(
       mainAxisSize: MainAxisSize.min,
       children: [
         if (data.editable)
           IconButton(
             onPressed: () async {
-              final config = await ExportConfigurationModel.get(Provider.of<Settings>(context, listen: false), AppLocalizations.of(context)!);
               setState(() {
                 config.delete(data);
               });
@@ -147,13 +147,12 @@ class _ExportItemsCustomizerState extends State<ExportItemsCustomizer> {
         IconButton(
           onPressed: () {
             Navigator.of(context).push(MaterialPageRoute(builder: (context) =>
-                EditExportColumnPage(
-                  initialDisplayName: data.columnTitle,
-                  initialInternalName: data.internalName,
-                  initialFormatPattern: data.formatPattern,
-                  editable: data.editable,
-
-                )
+              EditExportColumnPage(
+                initialDisplayName: data.columnTitle,
+                initialInternalName: data.internalName,
+                initialFormatPattern: data.formatPattern,
+                editable: data.editable,
+              )
             ));
           },
           tooltip: AppLocalizations.of(context)!.edit,
@@ -232,6 +231,3 @@ class _ExportItemsCustomizerState extends State<ExportItemsCustomizer> {
     widget.onReorder(widget.shownItems, widget.disabledItems);
   }
 }
-
-
-// 100 - 80 + (50 / 80 * (100 % 50))
\ No newline at end of file
lib/model/export_import.dart
@@ -22,12 +22,9 @@ import 'package:sqflite/sqflite.dart';
 import 'blood_pressure.dart';
 
 extension PdfCompatability on Color {
-  PdfColor toPdfColor() {
-    return PdfColor(red / 256, green / 256, blue / 256, opacity);
-  }
+  PdfColor toPdfColor() => PdfColor(red / 256, green / 256, blue / 256, opacity);
 }
 
-// TODO: update import warning
 // TODO: more testing
 class ExportFileCreator {
   final Settings settings;
@@ -40,7 +37,7 @@ class ExportFileCreator {
   Future<Uint8List> createFile(List<BloodPressureRecord> records) async {
     switch (settings.exportFormat) {
       case ExportFormat.csv:
-        return createCSVCFile(records);
+        return createCSVFile(records);
       case ExportFormat.pdf:
         return createPdfFile(records);
       case ExportFormat.db:
@@ -63,7 +60,7 @@ class ExportFileCreator {
     }
   }
 
-  Uint8List createCSVCFile(List<BloodPressureRecord> records) {
+  Uint8List createCSVFile(List<BloodPressureRecord> records) {
     final items = exportColumnsConfig.createTable(records, settings.exportCsvHeadline);
     final converter = ListToCsvConverter(fieldDelimiter: settings.csvFieldDelimiter, textDelimiter: settings.csvTextDelimiter);
     final csvData = converter.convert(items);
@@ -132,7 +129,6 @@ class ExportFileCreator {
       }
       records.add(BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(timestamp), sys, dia, pul, notes ?? ''));
     }
-
     return records;
   }
 
lib/model/export_options.dart
@@ -81,6 +81,7 @@ class ExportConfigurationModel {
     ExportColumn(internalName: 'Sauerstoffsättigung', columnTitle: '"My Heart" export oxygen', formatPattern: r'0', editable: false, hidden: true),
   ];
 
+  // TODO: testing
   void addOrUpdate(ExportColumn format) {
     final existingEntries = _availableFormats.where((element) => element.internalName == format.internalName);
     if (existingEntries.isNotEmpty) {
@@ -95,18 +96,20 @@ class ExportConfigurationModel {
         'columnTitle': format.columnTitle,
         'formatPattern': format.formatPattern
       }, where: 'internalColumnName = ?', whereArgs: [format.internalName]);
+    } else {
+      _availableFormats.add(format);
+      _database.insert('exportStrings', {
+        'internalColumnName': format.internalName,
+        'columnTitle': format.columnTitle,
+        'formatPattern': format.formatPattern
+      },);
     }
-    _availableFormats.add(format);
-    _database.insert('exportStrings', {
-      'internalColumnName': format.internalName,
-      'columnTitle': format.columnTitle,
-      'formatPattern': format.formatPattern
-    },);
+
   }
 
   void delete(ExportColumn format) {
     final existingEntries = _availableFormats.where((element) => (element.internalName == format.internalName) && element.editable);
-    assert(existingEntries.isNotEmpty, 'Tried to delete entry that doesn\'t exist');
+    assert(existingEntries.isNotEmpty, r"Tried to delete entry that doesn't exist or is not editable.");
     _availableFormats.removeWhere((element) => element.internalName == format.internalName);
     _database.delete('exportStrings', where: 'internalColumnName = ?', whereArgs: [format.internalName]);
   }
@@ -218,6 +221,7 @@ class ExportColumn {
     return fieldContents;
   }
 
+  /// Parses records if the format is easily reversible else returns an empty list
   List<(RowDataFieldType, dynamic)> parseRecord(String formattedRecord) {
     if (!isReversible || formattedRecord == 'null') return [];
 
lib/screens/subsettings/export_import_screen.dart
@@ -4,14 +4,13 @@ import 'package:blood_pressure_app/components/export_item_order.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/export_import.dart';
+import 'package:blood_pressure_app/model/export_options.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:jsaver/jSaver.dart';
 import 'package:provider/provider.dart';
 
-import '../../model/export_options.dart';
-
 class ExportImportScreen extends StatelessWidget {
   const ExportImportScreen({super.key});
 
lib/screens/home.dart
@@ -50,21 +50,17 @@ class AppHome extends StatelessWidget {
             return Column(
               verticalDirection: VerticalDirection.up,
               children: [
-                Theme(
-                  data: Theme.of(context),
-                  child: FloatingActionButton(
-                    tooltip: 'Add measurement',
-                    autofocus: true,
-                    onPressed: () {
-                      Navigator.push(
-                        context,
-                        _buildTransition(const AddMeasurementPage(), settings.animationSpeed),
-                      );
-                    },
-                    child: const Icon(Icons.add,),
-                  )
+                FloatingActionButton(
+                  tooltip: 'Add measurement',
+                  autofocus: true,
+                  onPressed: () {
+                    Navigator.push(
+                      context,
+                      _buildTransition(const AddMeasurementPage(), settings.animationSpeed),
+                    );
+                  },
+                  child: const Icon(Icons.add,),
                 ),
-
                 const SizedBox(
                   height: 10,
                 ),