Класс Completer
Класс Completer используется для создания
объекта Future, завершением которого можно
управлять вручную. Обычно Future создается
асинхронной функцией и завершается автоматически,
но Completer дает возможность сохранить
ссылку на Future и завершить его позже
из любого места программы. У класса есть свойство
future, которое возвращает связанный
Future, метод complete для успешного
завершения со значением и метод completeError
для завершения с ошибкой. Свойство isCompleted
показывает, был ли Completer уже завершен.
Синтаксис
Completer<T> completer = Completer<T>();
Здесь T - тип значения, которым будет
завершен связанный Future.
Пример
Давайте создадим Completer, получим его
Future и завершим его значением позже:
void main()
{
Completer<String> completer = Completer<String>();
completer.future.then((value) {
print(value);
});
completer.complete('abcde');
}
Результат выполнения кода:
"abcde"
Пример
Давайте завершим Completer с ошибкой
и обработаем ее через catchError:
void main()
{
Completer<String> completer = Completer<String>();
completer.future.catchError((error) {
print('Error: $error');
});
completer.completeError('Something went wrong');
}
Результат выполнения кода:
"Error: Something went wrong"
Пример
Давайте проверим свойство isCompleted
до и после завершения Completer:
void main()
{
Completer<int> completer = Completer<int>();
print(completer.isCompleted);
completer.complete(1);
print(completer.isCompleted);
}
Результат выполнения кода:
false
true
Смотрите также
-
класс
Future,
который представляет результат асинхронной операции -
метод
complete,
который завершает Completer значением -
метод
completeError,
который завершает Completer ошибкой -
свойство
future,
которое возвращает связанный Future