mirror of
https://github.com/ImranR98/Obtainium.git
synced 2025-07-16 06:36:44 +02: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 {
|
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();
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
@ -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());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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(
|
||||||
|
Reference in New Issue
Block a user