fix: use Future.wait for edit and delete tag

This commit is contained in:
Prateek Sunal 2024-05-01 23:26:30 +05:30
parent 8d096ecf04
commit 49c0295b21

View file

@ -580,22 +580,35 @@ class _EditTagDialogState extends State<EditTagDialog> {
onPressed: () async {
if (_tag.trim().isEmpty) return;
final dialog = createProgressDialog(
context,
context.l10n.pleaseWait,
);
await dialog.show();
// traverse through all the codes and edit this tag's value
final relevantCodes = (await CodeStore.instance.getAllCodes())
.validCodes
.where((element) => element.display.tags.contains(widget.tag));
final tasks = <Future>[];
for (final code in relevantCodes) {
final tags = code.display.tags;
tags.remove(widget.tag);
tags.add(_tag);
await CodeStore.instance.addCode(
code.copyWith(
display: code.display.copyWith(tags: tags),
tasks.add(
CodeStore.instance.addCode(
code.copyWith(
display: code.display.copyWith(tags: tags),
),
),
);
}
await Future.wait(tasks);
await dialog.hide();
Navigator.pop(context);
},
),
@ -619,15 +632,21 @@ Future<void> showDeleteTagDialog(BuildContext context, String tag) async {
.validCodes
.where((element) => element.display.tags.contains(tag));
final tasks = <Future>[];
for (final code in relevantCodes) {
final tags = code.display.tags;
tags.remove(tag);
await CodeStore.instance.addCode(
code.copyWith(
display: code.display.copyWith(tags: tags),
tasks.add(
CodeStore.instance.addCode(
code.copyWith(
display: code.display.copyWith(tags: tags),
),
),
);
}
await Future.wait(tasks);
},
);
}