import 'dart:async'; class AsyncLock { Future? _lastOp; Future run(Future Function() action) async { final previous = _lastOp; final completer = Completer(); _lastOp = completer.future; if (previous != null) { await previous; } try { return await action(); } finally { completer.complete(); } } }