Sobes.tech
Back to questions
Middle
120
questionbank

Что такое конструкторы 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.');
    });