toggleAllAttachments method
Future<void>
toggleAllAttachments(
)
Implementation
Future<void> toggleAllAttachments() async {
final List<bool> previousSelected =
attachments.map((Attachment a) => a.selected).toList();
allAttachmentsDisabled.value = !allAttachmentsDisabled.value;
final bool newSelected = !allAttachmentsDisabled.value;
for (Attachment attachment in attachments) {
attachment.selected = newSelected;
}
attachments.refresh();
update();
final List<Future<bool>> futures = <Future<bool>>[];
for (int i = 0; i < attachments.length; i++) {
final bool prevSelected = previousSelected[i];
if (prevSelected == newSelected) continue;
final Attachment attachment = attachments[i];
final int index = i;
futures.add(() async {
const int maxRetries = 3;
for (int attempt = 0; attempt < maxRetries; attempt++) {
try {
final Attachment? result = await AttachmentService
.patchAttachmentSelected(attachment.id, newSelected);
if (result != null) return true;
} catch (_) {}
}
if (index < attachments.length) {
attachments[index].selected = prevSelected;
}
return false;
}());
}
await Future.wait(futures);
attachments.refresh();
allAttachmentsDisabled.value =
!attachments.any((Attachment a) => a.selected);
update();
}