bool completeOnce([FutureOr<T>? value]) { if (!isCompleted) { complete(value); return true; } else { return false; } }