Commit d2a7b6c
Changed files (5)
lib
components
screens
subsettings
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,
),