Commit 35983a1

derdilla <derdilla06@gmail.com>
2023-06-20 07:20:12
make custom export entries optional
1 parent 5b9f69e
lib/l10n/app_de.arb
@@ -82,6 +82,8 @@
   "exportLimitDataRange": "Datenbereich einschränken",
   "exportInterval": "Datenbereich",
   "exportFormat": "Exportformat",
+  "exportCustomEntries": "Eigene Felder",
+  "addEntry": "Feld hinzufügen",
   "exportMimeType": "Export MIME typ",
   "csv": "CSV",
   "pdf": "PDF",
lib/l10n/app_en.arb
@@ -82,6 +82,8 @@
   "exportLimitDataRange": "limit data range",
   "exportInterval": "data range",
   "exportFormat": "export format",
+  "exportCustomEntries": "customize fields",
+  "addEntry": "Feld hinzufügen",
   "exportMimeType": "export MIME type",
   "exportMimeTypeDesc": "signalizes type to other apps",
   "csv": "CSV",
lib/model/export_import.dart
@@ -14,17 +14,26 @@ class DataExporter {
 
   Uint8List createFile(List<BloodPressureRecord> records) {
     if (settings.exportFormat == ExportFormat.csv) {
+      List<String> exportItems;
+      if (settings.exportCustomEntries) {
+        exportItems = settings.exportItems;
+      } else {
+        exportItems = ['timestampUnixMs', 'systolic', 'diastolic', 'pulse', 'notes'];
+      }
+
       var csvHead = '';
-      for (var attribute in settings.exportItems) {
-        csvHead += attribute;
-        csvHead += settings.csvFieldDelimiter;
+      for (var i = 0; i<exportItems.length; i++) {
+        csvHead += exportItems[i];
+        if (i<(exportItems.length - 1)) {
+          csvHead += settings.csvFieldDelimiter;
+        }
       }
       csvHead += '\n';
 
       List<List<dynamic>> items = [];
       for (var record in records) {
         List<dynamic> row = [];
-        for (var attribute in settings.exportItems) {
+        for (var attribute in exportItems) {
           switch (attribute) {
             case 'timestampUnixMs':
               row.add(record.creationTime.millisecondsSinceEpoch);
lib/model/settings_store.dart
@@ -358,6 +358,15 @@ class Settings extends ChangeNotifier {
     _prefs.setInt('exportDataRangeEndEpochMs', value.end.millisecondsSinceEpoch);
     notifyListeners();
   }
+
+  bool get exportCustomEntries {
+    return _prefs.getBool('exportCustomEntries') ?? false;
+  }
+
+  set exportCustomEntries(bool value) {
+    _prefs.setBool('exportCustomEntries', value);
+    notifyListeners();
+  }
   
   List<String> get exportAddableItems {
     return _prefs.getStringList('exportAddableItems') ?? [];
lib/screens/subsettings/export_import_screen.dart
@@ -58,7 +58,14 @@ class ExportImportScreen extends StatelessWidget {
                   }
                 },
               ),
-              const CsvItemsOrderCreator()
+              SwitchSettingsTile(
+                title: Text(AppLocalizations.of(context)!.exportCustomEntries),
+                initialValue: settings.exportCustomEntries,
+                onToggle: (value) {
+                  settings.exportCustomEntries = value;
+                }
+              ),
+              (settings.exportCustomEntries) ? const CsvItemsOrderCreator(): const SizedBox.shrink()
             ];
           }
 
@@ -268,14 +275,17 @@ class CsvItemsOrderCreator extends StatelessWidget {
                 }
               );
             },
-            child: const Center(
-              child: Row(
-                mainAxisSize: MainAxisSize.min,
-                children: [
-                  Icon(Icons.add),
-                  SizedBox(width: 10,),
-                  Text('ADD ENTRY')
-                ],
+            child: Container(
+              margin: const EdgeInsets.only(top: 15),
+              child: Center(
+                child: Row(
+                  mainAxisSize: MainAxisSize.min,
+                  children: [
+                    const Icon(Icons.add),
+                    const SizedBox(width: 10,),
+                    Text(AppLocalizations.of(context)!.addEntry)
+                  ],
+                ),
               ),
             ),
           ) : null,