class SingleEvent { SingleEvent({required Function(T? param) invoke}) : _invoke = invoke; final Function(T? param) _invoke; bool _isClosed = false; bool get isClosed => _isClosed; void invokeWith(T? param) { if (!_isClosed) { _invoke(param); } } void invoke() { if (!_isClosed) { _invoke(null); } } void close() { _isClosed = true; } }