133 votes

Existe-t-il un moyen de charger des données asynchrones sur la méthode InitState ?

Je suis à la recherche d'un moyen de charger des données asynchrones sur la méthode InitState, j'ai besoin de certaines données avant l'exécution de la méthode de construction. J'utilise un code GoogleAuth, et je dois exécuter la méthode de construction jusqu'à ce qu'un Stream soit exécuté.

Ma méthode initState est :

 @override
  void initState () {
    super.initState();
    _googleSignIn.onCurrentUserChanged.listen((GoogleSignInAccount account)     {
      setState(() {
        _currentUser = account;
      });
    });
    _googleSignIn.signInSilently();
  }

J'apprécierai tout commentaire.

4 votes

StreamBuilder est la solution correcte

0 votes

Ce code est absolument parfait tel quel ?

1 votes

Depuis initState() n'est appelé qu'une seule fois, y a-t-il un intérêt à utiliser setState() à l'intérieur ?

7voto

Gorges Points 130
  @override
  void initState() {
    super.initState();
    asyncInitState(); // async is not allowed on initState() directly
  }

  void asyncInitState() async {
    await yourAsyncCalls();
  }

6voto

Supun Dewapriya Points 291

Vous pouvez créer un asynchrone et l'appeler dans votre initState

@override
  void initState() {
    super.initState();

    asyncMethod(); ///initiate your method here
  }

Future<void> asyncMethod async{

 await ///write your method body here
}

4voto

George Obregon Points 11

Selon la documentation disponible sur https://pub.dev/packages/provider

initState() {
  super.initState();
  Future.microtask(() =>
    context.read<MyNotifier>(context).fetchSomething(someValue);
  );
}

2voto

40-Love Points 1333

Exemple de code :

 @override
  void initState() {
    super.initState();

    asyncOperation().then((val) {
      setState(() {});
      print("success");
    }).catchError((error, stackTrace) {
      print("outer: $error");
    });

//or

    asyncOperation().whenComplete(() {
      setState(() {});
      print("success");
    }).catchError((error, stackTrace) {
      print("outer: $error");
    });
  }

  Future<void> asyncOperation() async {
    await ... ;
  }

2voto

initState() et build ne peuvent pas être asynchrones ; mais dans celles-ci, vous pouvez appeler une fonction qui est asynchrone sans attendre cette fonction.

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