Commit f597dee

derdilla <82763757+NobodyForNothing@users.noreply.github.com>
2023-12-16 12:13:13
connect column adding and editing to manager
Signed-off-by: derdilla <82763757+NobodyForNothing@users.noreply.github.com>
1 parent a618604
Changed files (3)
lib
components
model
export_import
screens
subsettings
lib/components/dialoges/add_export_column_dialoge.dart
@@ -8,7 +8,7 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart';
 
 /// Dialoge widget for creating and editing a [UserColumn].
 ///
-/// For further documentation please refer to [showAddMeasurementDialoge].
+/// For further documentation please refer to [showAddExportColumnDialoge].
 class AddExportColumnDialoge extends StatefulWidget {
   /// Create a widget for creating and editing a [UserColumn].
   const AddExportColumnDialoge({super.key, this.initialColumn});
@@ -56,8 +56,10 @@ class _AddExportColumnDialogeState extends State<AddExportColumnDialoge> {
             onPressed: () {
               if (formKey.currentState?.validate() ?? false) {
                 formKey.currentState!.save();
-                final column = UserColumn(widget.initialColumn?.internalIdentifier ?? csvTitle,
-                    csvTitle, formatPattern);
+                final column = (widget.initialColumn != null) ?
+                  UserColumn.explicit(widget.initialColumn!.internalIdentifier, csvTitle, formatPattern) :
+                  UserColumn(csvTitle, csvTitle, formatPattern);
+
                 Navigator.pop(context, column);
               }
             },
@@ -159,7 +161,7 @@ class _AddExportColumnDialogeState extends State<AddExportColumnDialoge> {
 /// Internal identifier and display title are generated from
 /// the CSV title. There is no check whether a userColumn
 /// with the generated title exists.
-Future<UserColumn?> showAddMeasurementDialoge(BuildContext context, [ExportColumn? initialColumn]) =>
+Future<UserColumn?> showAddExportColumnDialoge(BuildContext context, [ExportColumn? initialColumn]) =>
     showDialog<UserColumn?>(context: context, builder: (context) => Dialog.fullscreen(
       child: AddExportColumnDialoge(initialColumn: initialColumn,),
     ));
\ No newline at end of file
lib/model/export_import/column.dart
@@ -228,10 +228,14 @@ class UserColumn extends ExportColumn {
         formatter = ScriptedFormatter(formatPattern),
         internalIdentifier = 'userColumn.$internalIdentifier';
 
+  /// UserColumn constructor that keeps the internalIdentifier.
+  UserColumn.explicit(this.internalIdentifier, this.csvTitle, String formatPattern):
+        formatter = ScriptedFormatter(formatPattern);
+
   @override
   /// Unique identifier of userColumn.
   ///
-  /// Is automatically be prefixed with `userColumn.` to avoid name collisions with build-ins.
+  /// Is automatically prefixed with `userColumn.` to avoid name collisions with build-ins.
   final String internalIdentifier;
 
   @override
lib/screens/subsettings/export_import/export_column_management_screen.dart
@@ -1,4 +1,5 @@
 import 'package:blood_pressure_app/components/dialoges/add_export_column_dialoge.dart';
+import 'package:blood_pressure_app/model/export_import/column.dart';
 import 'package:blood_pressure_app/model/storage/export_columns_store.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter_gen/gen_l10n/app_localizations.dart';
@@ -39,16 +40,24 @@ class ExportColumnsManagementScreen extends StatelessWidget {
                     title: Text(column.userTitle(localizations)),
                     subtitle: Text(column.formatPattern.toString()),
                     trailing: const Icon(Icons.edit),
-                    onTap: () {
-                      // TODO: implement tile editing
+                    onTap: () async {
+                      final editedColumn = await showAddExportColumnDialoge(context, column);
+                      if (editedColumn != null) {
+                        columnsManager.addOrUpdate(editedColumn);
+                      } // TODO: deleting
                     },
                   ),
                 ListTile(
                   leading: const Icon(Icons.add),
                   title: Text(localizations.addExportformat),
-                  onTap: () {
-                    Navigator.push(context, MaterialPageRoute(builder: (context) => AddExportColumnDialoge()));
-                    // TODO: reimplement tile adding
+                  onTap: () async{
+                    UserColumn? editedColumn = await showAddExportColumnDialoge(context);
+                    if (editedColumn != null) {
+                      while (columnsManager.userColumns.containsKey(editedColumn!.internalIdentifier)) {
+                        editedColumn = UserColumn('${editedColumn.internalIdentifier}I', editedColumn.csvTitle, editedColumn.formatPattern!);
+                      }
+                      columnsManager.addOrUpdate(editedColumn);
+                    }
                   },
                 )
               ],