Sobes.tech
Middle

Чӣ тавр сохтани Future дар Flutter ва чӣ гуна истифода бурдан?

sobes.tech AI

Ҷавоб аз AI

Конструктори Future у Flutter використовуються для створення об'єктів Future, які представляють результат асинхронної операції, що може бути виконана у майбутньому. Вони допомагають керувати потоком виконання асинхронного коду.

Основні конструктори:

  • Future(): Створює Future, який буде виконаний після завершення поточної мікрозадачі. Корисний для планування задач після завершення поточного циклу подій.

    Future(() {
      // Асинхронна операція
      print('Це виконується після поточної мікрозадачі.');
    });
    
  • Future.delayed(Duration duration, [FutureOr<T> computation()]): Створює Future, який буде виконаний після вказаної затримки. computation — це необов'язкова функція, яка виконується після затримки і повертає значення Future.

    Future.delayed(Duration seconds: 2), () {
      print('Це виконується через 2 секунди.');
    });
    
  • Future.value([FutureOr<T>? value]): Створює Future, який вже завершений з вказаним значенням. Якщо значення є іншим Future, цей конструктор чекатиме його завершення.

    Future<int>.value(123).then((value) => print('Значення: $value'));
    
  • Future.error(Object error, [StackTrace? stackTrace]): Створює Future, який вже завершений з вказаною помилкою.

    Future.error('Щось пішло не так').catchError((error) => print('Помилка: $error'));
    
  • Future.sync(FutureOr<T> computation()): Створює Future, який виконує обчислення синхронно одразу. Якщо обчислення повертає Future, цей конструктор чекатиме його завершення.

    Future.sync(() {
      print('Це виконується синхронно.');
      return 456;
    }).then((value) => print('Синхронне значення: $value'));
    

Використання then, catchError і whenComplete для обробки результату:

Future.delayed(Duration seconds: 1), () => 'Привіт, світ!')
    .then((result) {
      // Виконується при успішному завершенні
      print(result);
    })
    .catchError((error) {
      // Виконується при помилці
      print('Сталася помилка: $error');
    })
    .whenComplete(() {
      // Виконується незалежно від успіху або помилки
      print('Future завершено.');
    });