mirror of
				https://github.com/ImranR98/Obtainium.git
				synced 2025-10-31 13:33:28 +01:00 
			
		
		
		
	Finished new category editor (needs to be used)
This commit is contained in:
		| @@ -88,13 +88,15 @@ class GeneratedFormSwitch extends GeneratedFormItem { | ||||
|  | ||||
| class GeneratedFormTagInput extends GeneratedFormItem { | ||||
|   late MapEntry<String, String>? deleteConfirmationMessage; | ||||
|   late bool singleSelect; | ||||
|   GeneratedFormTagInput(String key, | ||||
|       {String label = 'Input', | ||||
|       List<Widget> belowWidgets = const [], | ||||
|       Map<String, MapEntry<int, bool>> defaultValue = const {}, | ||||
|       List<String? Function(Map<String, MapEntry<int, bool>> value)> | ||||
|           additionalValidators = const [], | ||||
|       this.deleteConfirmationMessage}) | ||||
|       this.deleteConfirmationMessage, | ||||
|       this.singleSelect = false}) | ||||
|       : super(key, | ||||
|             label: label, | ||||
|             belowWidgets: belowWidgets, | ||||
| @@ -277,6 +279,25 @@ class _GeneratedFormState extends State<GeneratedForm> { | ||||
|                                               MapEntry<int, bool>>)[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<String, MapEntry<int, bool>>) | ||||
|                                     .keys) { | ||||
|                                   if (key != e2.key) { | ||||
|                                     (values[widget.items[r][e].key] as Map< | ||||
|                                         String, | ||||
|                                         MapEntry<int, | ||||
|                                             bool>>)[key] = MapEntry( | ||||
|                                         (values[widget.items[r][e].key] as Map< | ||||
|                                                 String, | ||||
|                                                 MapEntry<int, bool>>)[key]! | ||||
|                                             .key, | ||||
|                                         false); | ||||
|                                   } | ||||
|                                 } | ||||
|                               } | ||||
|                               someValueChanged(); | ||||
|                             }); | ||||
|                           }, | ||||
|   | ||||
| @@ -41,7 +41,6 @@ class _SettingsPageState extends State<SettingsPage> { | ||||
|   Widget build(BuildContext context) { | ||||
|     SettingsProvider settingsProvider = context.watch<SettingsProvider>(); | ||||
|     SourceProvider sourceProvider = SourceProvider(); | ||||
|     AppsProvider appsProvider = context.read<AppsProvider>(); | ||||
|     if (settingsProvider.prefs == null) { | ||||
|       settingsProvider.initializeSettings(); | ||||
|     } | ||||
| @@ -174,17 +173,6 @@ class _SettingsPageState extends State<SettingsPage> { | ||||
|       } | ||||
|     }); | ||||
|  | ||||
|     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<SettingsPage> { | ||||
|                                   color: Theme.of(context).colorScheme.primary), | ||||
|                             ), | ||||
|                             height16, | ||||
|                             categoryTagInput | ||||
|                             const CategoryEditorSelector() | ||||
|                           ], | ||||
|                         ))), | ||||
|           SliverToBoxAdapter( | ||||
| @@ -390,15 +378,45 @@ class _LogsDialogState extends State<LogsDialog> { | ||||
| } | ||||
|  | ||||
| class CategoryEditorSelector extends StatefulWidget { | ||||
|   const CategoryEditorSelector({super.key}); | ||||
|   final void Function(List<String> categories)? onSelected; | ||||
|   final bool singleSelect; | ||||
|   const CategoryEditorSelector( | ||||
|       {super.key, this.onSelected, this.singleSelect = false}); | ||||
|  | ||||
|   @override | ||||
|   State<CategoryEditorSelector> createState() => _CategoryEditorSelectorState(); | ||||
| } | ||||
|  | ||||
| class _CategoryEditorSelectorState extends State<CategoryEditorSelector> { | ||||
|   Map<String, MapEntry<int, bool>> storedValues = {}; | ||||
|  | ||||
|   @override | ||||
|   Widget build(BuildContext context) { | ||||
|     return Container(); | ||||
|     var settingsProvider = context.watch<SettingsProvider>(); | ||||
|     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<String, MapEntry<int, bool>>; | ||||
|             settingsProvider.categories = | ||||
|                 storedValues.map((key, value) => MapEntry(key, value.key)); | ||||
|             if (widget.onSelected != null) { | ||||
|               widget.onSelected!(storedValues.keys | ||||
|                   .where((k) => storedValues[k]!.value) | ||||
|                   .toList()); | ||||
|             } | ||||
|           } | ||||
|         })); | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -153,6 +153,7 @@ class SettingsProvider with ChangeNotifier { | ||||
|  | ||||
|   set categories(Map<String, int> cats) { | ||||
|     prefs?.setString('categories', jsonEncode(cats)); | ||||
|     notifyListeners(); | ||||
|   } | ||||
|  | ||||
|   getCategoryFormItem({String initCategory = ''}) => GeneratedFormDropdown( | ||||
|   | ||||
		Reference in New Issue
	
	Block a user