From a3f9947f28fd128c3bbcabb3d5ea8f036cc2fbe0 Mon Sep 17 00:00:00 2001 From: Imran Remtulla Date: Thu, 22 Dec 2022 01:24:35 -0500 Subject: [PATCH] Finished new category editor (needs to be used) --- lib/components/generated_form.dart | 23 ++++++++++++- lib/pages/settings.dart | 48 +++++++++++++++++++--------- lib/providers/settings_provider.dart | 1 + 3 files changed, 56 insertions(+), 16 deletions(-) diff --git a/lib/components/generated_form.dart b/lib/components/generated_form.dart index 14d6607..1411217 100644 --- a/lib/components/generated_form.dart +++ b/lib/components/generated_form.dart @@ -88,13 +88,15 @@ class GeneratedFormSwitch extends GeneratedFormItem { class GeneratedFormTagInput extends GeneratedFormItem { late MapEntry? deleteConfirmationMessage; + late bool singleSelect; GeneratedFormTagInput(String key, {String label = 'Input', List belowWidgets = const [], Map> defaultValue = const {}, List> value)> additionalValidators = const [], - this.deleteConfirmationMessage}) + this.deleteConfirmationMessage, + this.singleSelect = false}) : super(key, label: label, belowWidgets: belowWidgets, @@ -277,6 +279,25 @@ class _GeneratedFormState extends State { MapEntry>)[e2.key]! .key, value); + if ((widget.items[r][e] as GeneratedFormTagInput) + .singleSelect && + value == true) { + for (var key in (values[widget.items[r][e].key] + as Map>) + .keys) { + if (key != e2.key) { + (values[widget.items[r][e].key] as Map< + String, + MapEntry>)[key] = MapEntry( + (values[widget.items[r][e].key] as Map< + String, + MapEntry>)[key]! + .key, + false); + } + } + } someValueChanged(); }); }, diff --git a/lib/pages/settings.dart b/lib/pages/settings.dart index 49009f3..5e86d0d 100644 --- a/lib/pages/settings.dart +++ b/lib/pages/settings.dart @@ -41,7 +41,6 @@ class _SettingsPageState extends State { Widget build(BuildContext context) { SettingsProvider settingsProvider = context.watch(); SourceProvider sourceProvider = SourceProvider(); - AppsProvider appsProvider = context.read(); if (settingsProvider.prefs == null) { settingsProvider.initializeSettings(); } @@ -174,17 +173,6 @@ class _SettingsPageState extends State { } }); - var categories = settingsProvider.categories; - var categoryTagInput = GeneratedForm(items: [ - [ - GeneratedFormTagInput('categories', - defaultValue: categories - .map((key, value) => MapEntry(key, MapEntry(value, false))), - deleteConfirmationMessage: MapEntry( - tr('deleteCategoryQuestion'), tr('categoryDeleteWarning'))) - ] - ], onValueChanges: ((values, valid, isBuilding) {})); - const height16 = SizedBox( height: 16, ); @@ -273,7 +261,7 @@ class _SettingsPageState extends State { color: Theme.of(context).colorScheme.primary), ), height16, - categoryTagInput + const CategoryEditorSelector() ], ))), SliverToBoxAdapter( @@ -390,15 +378,45 @@ class _LogsDialogState extends State { } class CategoryEditorSelector extends StatefulWidget { - const CategoryEditorSelector({super.key}); + final void Function(List categories)? onSelected; + final bool singleSelect; + const CategoryEditorSelector( + {super.key, this.onSelected, this.singleSelect = false}); @override State createState() => _CategoryEditorSelectorState(); } class _CategoryEditorSelectorState extends State { + Map> storedValues = {}; + @override Widget build(BuildContext context) { - return Container(); + var settingsProvider = context.watch(); + storedValues = settingsProvider.categories.map((key, value) => + MapEntry(key, MapEntry(value, storedValues[key]?.value ?? false))); + return GeneratedForm( + items: [ + [ + GeneratedFormTagInput('categories', + defaultValue: storedValues, + deleteConfirmationMessage: MapEntry( + tr('deleteCategoryQuestion'), tr('categoryDeleteWarning')), + singleSelect: widget.singleSelect) + ] + ], + onValueChanges: ((values, valid, isBuilding) { + if (!isBuilding) { + storedValues = + values['categories'] as Map>; + settingsProvider.categories = + storedValues.map((key, value) => MapEntry(key, value.key)); + if (widget.onSelected != null) { + widget.onSelected!(storedValues.keys + .where((k) => storedValues[k]!.value) + .toList()); + } + } + })); } } diff --git a/lib/providers/settings_provider.dart b/lib/providers/settings_provider.dart index 9e887b0..ad73ad3 100644 --- a/lib/providers/settings_provider.dart +++ b/lib/providers/settings_provider.dart @@ -153,6 +153,7 @@ class SettingsProvider with ChangeNotifier { set categories(Map cats) { prefs?.setString('categories', jsonEncode(cats)); + notifyListeners(); } getCategoryFormItem({String initCategory = ''}) => GeneratedFormDropdown(