transaction method
Implementation
@override
Future<void> transaction(
Future<void> Function() action, {
List<String>? boxNames,
bool readOnly = false,
}) async {
await runZoned(() async {
try {
CollectionBox.transactionBoxes[Zone.current] = <String>{};
await action();
} finally {
final flushFutures = <Future<void>>[];
for (final boxName in CollectionBox.transactionBoxes[Zone.current]!) {
final i = _openBoxes.indexWhere((box) => box.name == boxName);
if (i != -1) {
flushFutures.add(_openBoxes[i].flush());
}
}
await Future.wait(flushFutures);
CollectionBox.transactionBoxes.remove(Zone.current);
}
});
}