Что такое конструкторы Future в Flutter и как их использовать?
Sobes Copilot
Get answers in real time
Answer from AI
sobes.tech AI
Конструкторы Future в Flutter используются для создания объектов Future, представляющих результат асинхронной операции, которая может быть выполнена в будущем. Они помогают управлять потоком выполнения асинхронного кода.
Основные конструкторы:
-
Future(): Создает Future, который будет выполнен после завершения текущей микрозадачи (microtask). Полезен для планирования задач после завершения текущего цикла событий.
Future(() { // Асинхронная операция print('This runs after the current microtask.'); }); -
Future.delayed(Duration duration, [FutureOr<T> computation()]): Создает Future, который будет выполнен после указанной задержки.
computation- это необязательная функция, которая выполняется после задержки и возвращает значение Future.Future.delayed(Duration(seconds: 2), () { print('This runs after 2 seconds.'); }); -
Future.value([FutureOr<T>? value]): Создает Future, который уже завершен с указанным значением. Если значение является другим
Future, этот конструктор будет ждать его завершения.Future<int>.value(123).then((value) => print('Value is: $value')); -
Future.error(Object error, [StackTrace? stackTrace]): Создает Future, который уже завершен с указанной ошибкой.
Future.error('Something went wrong').catchError((error) => print('Error: $error')); -
Future.sync(FutureOr<T> computation()): Создает Future, который выполняет вычисление синхронно сразу же. Если вычисление возвращает Future, этот конструктор будет ждать его завершения.
Future.sync(() { print('This runs synchronously.'); return 456; }).then((value) => print('Sync value: $value'));
Использование then, catchError и whenComplete для обработки результата:
Future.delayed(Duration(seconds: 1), () => 'Hello, World!')
.then((result) {
// Выполняется при успешном завершении
print(result);
})
.catchError((error) {
// Выполняется при ошибке
print('An error occurred: $error');
})
.whenComplete(() {
// Выполняется независимо от успеха или ошибки
print('Future completed.');
});