Commit 93707f5
Changed files (3)
lib
components
model
screens
subsettings
lib/components/export_item_order.dart
@@ -4,13 +4,12 @@ import 'dart:async';
import 'package:badges/badges.dart' as badges;
import 'package:blood_pressure_app/components/consistent_future_builder.dart';
import 'package:blood_pressure_app/model/export_options.dart';
+import 'package:blood_pressure_app/model/settings_store.dart';
import 'package:blood_pressure_app/screens/subsettings/export_column_data.dart';
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:provider/provider.dart';
-import '../model/settings_store.dart';
-
class ExportItemsCustomizer extends StatefulWidget {
final List<ExportColumn> shownItems;
final List<ExportColumn> disabledItems;
@@ -94,11 +93,7 @@ class _ExportItemsCustomizerState extends State<ExportItemsCustomizer> {
child: IconButton(
tooltip: AppLocalizations.of(context)!.addExportformat,
onPressed:() {
- Navigator.of(context).push(MaterialPageRoute(builder: (context) =>
- EditExportColumnPage(onValidSubmit: (value) {
- result.addOrUpdate(value);
- },)
- ));
+ Navigator.of(context).push(MaterialPageRoute(builder: (context) => const EditExportColumnPage()));
},
icon: const Icon(Icons.add),
),
@@ -108,7 +103,8 @@ class _ExportItemsCustomizerState extends State<ExportItemsCustomizer> {
}
Widget _buildManagePresetsBadge(BuildContext context, ExportConfigurationModel result, {required Widget child}) {
- final localizations = AppLocalizations.of(context)!;
+ final exportConfigurations = result.exportConfigurations;
+ final exportConfigurationKeys = exportConfigurations.keys.toList();
return badges.Badge(
position: badges.BadgePosition.topEnd(top: 3, end: 3),
badgeStyle: badges.BadgeStyle(
@@ -119,20 +115,13 @@ class _ExportItemsCustomizerState extends State<ExportItemsCustomizer> {
icon: const Icon(Icons.collections_bookmark),
itemBuilder: (BuildContext context) {
return [
- PopupMenuItem<int>(value: 0, child: Text(localizations.default_)),
- const PopupMenuItem<int>(value: 1, child: Text('"My Heart" export'))
+ for (var i = 0; i< exportConfigurationKeys.length; i++)
+ PopupMenuItem<int>(value: i, child: Text(exportConfigurationKeys[i])),
];
},
onSelected: (value) {
- switch (value) {
- case 0:
- result.settings.exportItems = ['timestampUnixMs', 'systolic', 'diastolic', 'pulse', 'notes'];
- return;
- case 1:
- result.settings.exportItems = ['DATUM', 'SYSTOLE', 'DIASTOLE', 'PULS', 'Beschreibung', 'Tags', 'Gewicht', 'Sauerstoffsättigung'];
- return;
- }
- assert(false);
+ final settings = Provider.of<Settings>(context, listen: false);
+ settings.exportItems = exportConfigurations[exportConfigurationKeys[value]]!;
},
),
child: child,
@@ -163,12 +152,7 @@ class _ExportItemsCustomizerState extends State<ExportItemsCustomizer> {
initialInternalName: data.internalName,
initialFormatPattern: data.formatPattern,
editable: data.editable,
- onValidSubmit: (value) async {
- final config = await ExportConfigurationModel.get(Provider.of<Settings>(context, listen: false), AppLocalizations.of(context)!);
- setState(() {
- config.addOrUpdate(value);
- });
- },
+
)
));
},
lib/model/export_options.dart
@@ -17,6 +17,12 @@ class ExportConfigurationModel {
final List<ExportColumn> _availableFormats = [];
+ Map<String, List<String>> get exportConfigurations => {
+ // Not fully localized, as potemtial user added configurations can't be localized as well
+ localizations.default_: ['timestampUnixMs', 'systolic', 'diastolic', 'pulse', 'notes'],
+ '"My Heart" export': ['DATUM', 'SYSTOLE', 'DIASTOLE', 'PULS', 'Beschreibung', 'Tags', 'Gewicht', 'Sauerstoffsättigung'],
+ };
+
ExportConfigurationModel._create(this.settings, this.localizations);
Future<void> _asyncInit(String? dbPath, bool isFullPath) async {
dbPath ??= await getDatabasesPath();
lib/screens/subsettings/export_column_data.dart
@@ -1,18 +1,19 @@
import 'package:blood_pressure_app/model/blood_pressure.dart';
import 'package:blood_pressure_app/model/export_options.dart';
+import 'package:blood_pressure_app/model/settings_store.dart';
import 'package:blood_pressure_app/screens/subsettings/export_field_format_documentation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
+import 'package:provider/provider.dart';
class EditExportColumnPage extends StatefulWidget {
final String? initialInternalName;
final String? initialDisplayName;
final String? initialFormatPattern;
- final void Function(ExportColumn) onValidSubmit;
final bool editable;
const EditExportColumnPage({super.key, this.initialDisplayName, this.initialInternalName,
- this.initialFormatPattern, required this.onValidSubmit, this.editable = true});
+ this.initialFormatPattern, this.editable = true});
@override
State<EditExportColumnPage> createState() => _EditExportColumnPageState();
@@ -162,12 +163,14 @@ class _EditExportColumnPageState extends State<EditExportColumnPage> {
label: Text(localizations.btnSave),
onPressed: (widget.editable) ? (() async {
if (_formKey.currentState?.validate() ?? false) {
- widget.onValidSubmit(ExportColumn(
+ final settings = Provider.of<Settings>(context, listen: false);
+ final navigator = Navigator.of(context);
+ (await ExportConfigurationModel.get(settings, localizations)).addOrUpdate(ExportColumn(
internalName: _internalName!,
columnTitle: _displayName!,
formatPattern: _formatPattern!
));
- Navigator.of(context).pop();
+ navigator.pop();
}
}) : null,
)