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 приключи.');
    });