FutureOr<R> onOpen<R>(FutureOr<R> Function() f) { if (_open) { return f(); } else { return _openCompleter.future.then((_) { return f(); }); } }