Commit 8ef819e
Changed files (1)
lib
screens
subsettings
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),
+ ),
+ ),
+ ),
+ ],
+ ),
+ );
+ }
+
+}
+