transaction method

  1. @override
Future<void> transaction(
  1. Future<void> action(), {
  2. List<String>? boxNames,
  3. bool readOnly = false,
})

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);
    }
  });
}