Finished new category editor (needs to be used)

This commit is contained in:
Imran Remtulla
2022-12-22 01:24:35 -05:00
parent 6977858b99
commit a3f9947f28
3 changed files with 56 additions and 16 deletions

View File

@ -88,13 +88,15 @@ class GeneratedFormSwitch extends GeneratedFormItem {
class GeneratedFormTagInput extends GeneratedFormItem { class GeneratedFormTagInput extends GeneratedFormItem {
late MapEntry<String, String>? deleteConfirmationMessage; late MapEntry<String, String>? deleteConfirmationMessage;
late bool singleSelect;
GeneratedFormTagInput(String key, GeneratedFormTagInput(String key,
{String label = 'Input', {String label = 'Input',
List<Widget> belowWidgets = const [], List<Widget> belowWidgets = const [],
Map<String, MapEntry<int, bool>> defaultValue = const {}, Map<String, MapEntry<int, bool>> defaultValue = const {},
List<String? Function(Map<String, MapEntry<int, bool>> value)> List<String? Function(Map<String, MapEntry<int, bool>> value)>
additionalValidators = const [], additionalValidators = const [],
this.deleteConfirmationMessage}) this.deleteConfirmationMessage,
this.singleSelect = false})
: super(key, : super(key,
label: label, label: label,
belowWidgets: belowWidgets, belowWidgets: belowWidgets,
@ -277,6 +279,25 @@ class _GeneratedFormState extends State<GeneratedForm> {
MapEntry<int, bool>>)[e2.key]! MapEntry<int, bool>>)[e2.key]!
.key, .key,
value); 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(); someValueChanged();
}); });
}, },

View File

@ -41,7 +41,6 @@ class _SettingsPageState extends State<SettingsPage> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
SettingsProvider settingsProvider = context.watch<SettingsProvider>(); SettingsProvider settingsProvider = context.watch<SettingsProvider>();
SourceProvider sourceProvider = SourceProvider(); SourceProvider sourceProvider = SourceProvider();
AppsProvider appsProvider = context.read<AppsProvider>();
if (settingsProvider.prefs == null) { if (settingsProvider.prefs == null) {
settingsProvider.initializeSettings(); 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( const height16 = SizedBox(
height: 16, height: 16,
); );
@ -273,7 +261,7 @@ class _SettingsPageState extends State<SettingsPage> {
color: Theme.of(context).colorScheme.primary), color: Theme.of(context).colorScheme.primary),
), ),
height16, height16,
categoryTagInput const CategoryEditorSelector()
], ],
))), ))),
SliverToBoxAdapter( SliverToBoxAdapter(
@ -390,15 +378,45 @@ class _LogsDialogState extends State<LogsDialog> {
} }
class CategoryEditorSelector extends StatefulWidget { 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 @override
State<CategoryEditorSelector> createState() => _CategoryEditorSelectorState(); State<CategoryEditorSelector> createState() => _CategoryEditorSelectorState();
} }
class _CategoryEditorSelectorState extends State<CategoryEditorSelector> { class _CategoryEditorSelectorState extends State<CategoryEditorSelector> {
Map<String, MapEntry<int, bool>> storedValues = {};
@override @override
Widget build(BuildContext context) { 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());
}
}
}));
} }
} }

View File

@ -153,6 +153,7 @@ class SettingsProvider with ChangeNotifier {
set categories(Map<String, int> cats) { set categories(Map<String, int> cats) {
prefs?.setString('categories', jsonEncode(cats)); prefs?.setString('categories', jsonEncode(cats));
notifyListeners();
} }
getCategoryFormItem({String initCategory = ''}) => GeneratedFormDropdown( getCategoryFormItem({String initCategory = ''}) => GeneratedFormDropdown(