From e4b26be01f362d394b104e0aefd01c42656ca993 Mon Sep 17 00:00:00 2001 From: Daniel Martin Date: Sat, 22 Jul 2023 17:46:08 +1000 Subject: [PATCH] Add color button to Category editor Prevent randomly picking the same color --- lib/components/generated_form.dart | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/lib/components/generated_form.dart b/lib/components/generated_form.dart index 761d6bc..300b679 100644 --- a/lib/components/generated_form.dart +++ b/lib/components/generated_form.dart @@ -369,6 +369,36 @@ class _GeneratedFormState extends State { )); }) ?? [const SizedBox.shrink()], + (values[widget.items[r][e].key] + as Map>?) + ?.values + .where((e) => e.value) + .length == 1 + ? Padding( + padding: const EdgeInsets.symmetric(horizontal: 4), + child: IconButton( + onPressed: () { + setState(() { + var temp = values[widget.items[r][e].key] + as Map>; + // get selected category str where bool is true + final oldEntry = temp.entries.firstWhere((entry) => entry.value.value); + // generate new color, ensure it is not the same + int newColor = oldEntry.value.key; + while(oldEntry.value.key == newColor) { + newColor = generateRandomLightColor().value; + } + // Update entry with new color, remain selected + temp.update(oldEntry.key, (old) => MapEntry(newColor, old.value)); + values[widget.items[r][e].key] = temp; + someValueChanged(); + }); + }, + icon: const Icon(Icons.format_color_fill_rounded), + visualDensity: VisualDensity.compact, + tooltip: tr('colour'), + )) + : const SizedBox.shrink(), (values[widget.items[r][e].key] as Map>?) ?.values