Commit 8ef819e

derdilla <derdilla06@gmail.com>
2023-06-18 15:29:02
add entry order option
1 parent 52936a4
Changed files (1)
lib
screens
lib/screens/subsettings/export_import_screen.dart
@@ -48,7 +48,8 @@ class ExportImportScreen extends StatelessWidget {
                   settings.csvTextDelimiter = value;
                 }
               },
-            )
+            ),
+            CsvItemsOrderCreator()
           ];
         }
 
@@ -117,8 +118,20 @@ class ExportImportScreen extends StatelessWidget {
                   child: MaterialButton(
                     height: 60,
                     child:  Text(AppLocalizations.of(context)!.export),
-                    onPressed: () {
-                      Provider.of<BloodPressureModel>(context, listen: false).save((success, msg) {
+                    onPressed: () async {
+                      var settings = Provider.of<Settings>(context);
+                      var range = settings.exportDataRange;
+                      if (range == null) {
+                        ScaffoldMessenger.of(context)
+                            .showSnackBar(SnackBar(content: Text(AppLocalizations.of(context)!.errNoRangeForExport)));
+                        return;
+                      }
+
+                      var entries = await Provider.of<BloodPressureModel>(context, listen: false).getInTimeRange(settings.exportDataRange!.start, settings.exportDataRange!.end);
+                      var fileContents = DataExporter(settings).createFile(entries);
+
+                      /*
+                      .save((success, msg) {
                         if (success && msg != null) {
                           ScaffoldMessenger.of(context)
                               .showSnackBar(SnackBar(content: Text(AppLocalizations.of(context)!.success(msg))));
@@ -127,6 +140,7 @@ class ExportImportScreen extends StatelessWidget {
                               .showSnackBar(SnackBar(content: Text(AppLocalizations.of(context)!.error(msg))));
                         }
                       }, exportAsText: false);
+                       */
                     },
                   )
               ),
@@ -163,3 +177,106 @@ class ExportImportScreen extends StatelessWidget {
     );
   }
 }
+
+class CsvItemsOrderCreator extends StatefulWidget {
+  @override
+  State<StatefulWidget> createState() => _CsvItemsOrderCreatorState();
+}
+
+class _CsvItemsOrderCreatorState extends State<CsvItemsOrderCreator> {
+  List<String> _items = ['timestampUnixMs', 'systolic', 'diastolic', 'pulse', 'notes'];
+  List<String> _addable = [];
+
+  @override
+  Widget build(BuildContext context) {
+    print(_addable);
+    return Container(
+      margin: const EdgeInsets.fromLTRB(45, 20, 10, 0),
+      padding: const EdgeInsets.all(20),
+      height: 320,
+      decoration: BoxDecoration(
+        border: Border.all(color: Theme.of(context).textTheme.labelLarge?.color ?? Colors.teal),
+        borderRadius: const BorderRadius.all(Radius.circular(10)),
+      ),
+      clipBehavior: Clip.hardEdge,
+      child: ReorderableListView(
+        physics: const NeverScrollableScrollPhysics(),
+        shrinkWrap: true,
+        onReorder: (oldIndex, newIndex) {
+          setState(() {
+            if (oldIndex < newIndex) {
+              newIndex -= 1;
+            }
+            final String item = _items.removeAt(oldIndex);
+            _items.insert(newIndex, item);
+          });
+        },
+        footer: (_addable.isNotEmpty) ? InkWell(
+          onTap: () {
+            showDialog(context: context,
+                builder: (context) {
+                  return Dialog(
+                    shape: const RoundedRectangleBorder(
+                      borderRadius: BorderRadius.all(Radius.circular(50))
+                    ),
+                    child: Container(
+                      height: 330,
+                      padding: const EdgeInsets.all(30),
+                      child: ListView(
+                        children: [
+                          for (int i = 0; i < _addable.length; i += 1)
+                            ListTile(
+                              title: Text(_addable[i]),
+                              onTap: () {
+                                setState(() {
+                                  var addedItem = _addable.removeAt(i);
+                                  _items.add(addedItem);
+                                });
+                                Navigator.of(context).pop();
+
+                              },
+                            )
+                        ],
+                      ),
+                    ),
+                  );
+                }
+            );
+          },
+          child:  const Center(
+            child: Row(
+              mainAxisSize: MainAxisSize.min,
+              children: [
+                Icon(Icons.add),
+                SizedBox(width: 10,),
+                Text('ADD ENTRY')
+              ],
+            ),
+          ),
+        ) : null,
+        children: <Widget>[
+          for (int i = 0; i < _items.length; i += 1)
+            SizedBox(
+              key: Key(_items[i]),
+              child: Dismissible(
+                key: Key('dism$_items[i]'),
+                background: Container(color: Colors.red),
+                onDismissed: (direction) {
+                  setState(() {
+                    var removedItem = _items.removeAt(i);
+                    _addable.add(removedItem);
+                  });
+                },
+                child: ListTile(
+                  title: Text(_items[i]),
+                  trailing: const Icon(Icons.drag_handle),
+                ),
+              ),
+            ),
+        ],
+      ),
+    );
+  }
+
+}
+