189 votes

Comment exécuter du code après un certain délai dans Flutter?

Je voudrais exécuter une fonction après un certain délai après la construction de mon Widget. Quelle est la manière idiomatique de le faire en Flutter?

Ce que j'essaie d'accomplir: Je voudrais commencer avec un Widget FlutterLogo par défaut et ensuite changer sa propriété style après une certaine durée.

331voto

Rahul Sharma Points 2074

Vous pouvez utiliser Future.delayed pour exécuter votre code après un certain temps. par exemple :

Future.delayed(const Duration(milliseconds: 500), () {

// Ici vous pouvez écrire votre code

  setState(() {
    // Ici vous pouvez écrire votre code pour ouvrir une nouvelle vue
  });

});

Dans la fonction setState, vous pouvez écrire un code lié à l'interface utilisateur de l'application, par exemple actualiser les données de l'écran, changer le texte de l'étiquette, etc.

0 votes

Pour éviter un avertissement, vérifiez que votre widget est toujours monté avant d'appeler setState

83voto

Bradley Campbell Points 3440

Compris

class AnimatedFlutterLogo extends StatefulWidget {
  @override
  State createState() => new _AnimatedFlutterLogoState();
}

class _AnimatedFlutterLogoState extends State {
  Timer _timer;
  FlutterLogoStyle _logoStyle = FlutterLogoStyle.markOnly;

  _AnimatedFlutterLogoState() {
    _timer = new Timer(const Duration(milliseconds: 400), () {
      setState(() {
        _logoStyle = FlutterLogoStyle.horizontal;
      });
    });
  }

  @override
  void dispose() {
    super.dispose();
    _timer.cancel();
  }

  @override
  Widget build(BuildContext context) {
    return new FlutterLogo(
      size: 200.0,
      textColor: Palette.white,
      style: _logoStyle,
    );
  }
}

1 votes

D'où avez-vous importé le Timer ?

4 votes

Compris import 'dart:async'

0 votes

Une modification consisterait à mettre timer = ... dans la surcharge de initState. De cette façon, vous avez accès à widget qui est défini dans le constructeur de State<>.

79voto

jai khambhayta Points 795

Déclencher des actions après le compte à rebours

Timer(Duration(seconds: 3), () {
  print("Oui, cette ligne est imprimée après 3 secondes");
});

Répéter des actions

Timer.periodic(Duration(seconds: 5), (timer) {
  print(DateTime.now());
});

Déclencher le minuteur immédiatement

Timer(Duration(seconds: 0), () {
  print("Oui, cette ligne est imprimée immédiatement");
});

0 votes

Salut Jai, par hasard, tu sais comment résoudre cela? stackoverflow.com/questions/68324422/…

57voto

Armands L. Points 1105

Voici l'extrait que tout le monde recherche :

Future.delayed(Duration(milliseconds: 100), () {
  // Faire quelque chose
});

1 votes

Court et parfait

0 votes

Salut Armands, savez-vous par hasard comment résoudre cela? stackoverflow.com/questions/68324422/…

0 votes

Cela devrait être la solution acceptée

19voto

Paresh Mangukiya Points 13942

Vous pouvez le faire de deux façons, la première est Future.delayed et la deuxième est Timer

Utilisation de Timer

Timer est une classe qui représente un minuteur de compte à rebours configuré pour déclencher une action une fois la fin du temps atteinte, et il peut se déclencher une seule fois ou de manière répétée.

Assurez-vous d'importer le package dart:async au début du programme pour utiliser Timer

Timer(Duration(seconds: 5), () {
  print("Cette ligne est exécutée après 5 secondes");
});

Utilisation de Future.delayed

Future.delayed crée un futur qui exécute son calcul après un délai.

Assurez-vous d'importer le package dart:async au début du programme pour utiliser Future.delayed

Future.delayed(Duration(seconds: 5), () {
   print("Cette ligne est exécutée après 5 secondes");
});

0 votes

Salut Paresh, sais-tu par hasard comment résoudre cela? stackoverflow.com/questions/68324422/…

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X