Sobes.tech
Middle

Čo sú konštruktory Future vo Flutteri a ako ich používať?

sobes.tech AI

Odpoveď od AI

Konštruktory Future v Flutter sa používajú na vytváranie objektov Future, ktoré predstavujú výsledok asynchrónnej operácie, ktorá môže byť vykonaná v budúcnosti. Pomáhajú riadiť tok vykonávania asynchrónneho kódu.

Hlavné konštruktory:

  • Future(): Vytvára Future, ktorý bude vykonaný po dokončení aktuálnej mikroúlohy. Je užitočný na plánovanie úloh po ukončení aktuálneho cyklu udalostí.

    Future(() {
      // Asynchrónna operácia
      print('Toto beží po aktuálnej mikroúlohe.');
    });
    
  • Future.delayed(Duration duration, [FutureOr<T> computation()]): Vytvára Future, ktorý bude vykonaný po zadanom oneskorení. computation je voliteľná funkcia, ktorá sa vykoná po oneskorení a vráti hodnotu Future.

    Future.delayed(Duration seconds: 2), () {
      print('Toto beží po 2 sekundách.');
    });
    
  • Future.value([FutureOr<T>? value]): Vytvára Future, ktorý je už ukončený s uvedenou hodnotou. Ak je hodnota iný Future, tento konštruktor bude čakať na jeho ukončenie.

    Future<int>.value(123).then((value) => print('Hodnota je: $value'));
    
  • Future.error(Object error, [StackTrace? stackTrace]): Vytvára Future, ktorý je už ukončený s uvedenou chybou.

    Future.error('Niečo sa pokazilo').catchError((error) => print('Chyba: $error'));
    
  • Future.sync(FutureOr<T> computation()): Vytvára Future, ktorý vykonáva výpočet synchronne okamžite. Ak výpočet vracia Future, tento konštruktor bude čakať na jeho ukončenie.

    Future.sync(() {
      print('Toto beží synchronne.');
      return 456;
    }).then((value) => print('Synchronná hodnota: $value'));
    

Použitie then, catchError a whenComplete na spracovanie výsledku:

Future.delayed(Duration seconds: 1), () => 'Ahoj, svet!')
    .then((result) {
      // Vykoná sa pri úspešnom ukončení
      print(result);
    })
    .catchError((error) {
      // Vykoná sa pri chybe
      print('Vyskytla sa chyba: $error');
    })
    .whenComplete(() {
      // Vykoná sa bez ohľadu na úspech alebo chybu
      print('Future je ukončené.');
    });