// Copyright 2024 The Flutter Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file or at https://developers.google.com/open-source/licenses/bsd. import 'dart:async'; extension CompleterExtension on Completer { /// Completes this completer with optional [value] only if it has not already /// been completed. /// /// If the completer has already been completed, [orElse] will be called if it /// is not null, void safeComplete([T? value, void Function()? orElse]) { if (!isCompleted) { complete(value); } else { orElse?.call(); } } /// Completes this completer with [error] and an optional [stackTrace] only if /// it has not already been completed. void safeCompleteError(Object error, [StackTrace? stackTrace]) { if (!isCompleted) { completeError(error, stackTrace); } } }