11 votes

Est-ce que notifyListeners() se termine parfois de manière asynchrone ?

J'appelle notifyListeners() vers la fin d'une classe qui renvoie un futur, juste avant l'instruction de retour. Les actions initiées par notifyListeners ne se terminent pas complètement avant que l'instruction return soit appelée et que les instructions suivantes soient traitées, ce qui entraîne des erreurs. Il semble que notifyListeners se termine d'une manière ou d'une autre de façon asynchrone.

J'ai posé la question sur un autre forum et on m'a répondu qu'il s'agissait d'un bogue courant dans les flotteurs, notamment en ce qui concerne les animations. Il me semble plus probable que je fasse quelque chose de mal avec ma syntaxe. Quelqu'un a-t-il déjà rencontré ce "bug" ?

J'ai essayé d'utiliser à la fois .then() et async / await. Les deux ont le même résultat.

Future<bool> updateProduct(Map<String, dynamic> updatedProduct)

...

return http
    .put(
        'https://chocolate-f3e81.firebaseio.com/products/${newProduct.serverID}.json',
        body: json.encode(newProductMap))
    .then<bool>((http.Response response) {
  if (response.statusCode == 200 || response.statusCode == 201) {
    _products[selectedProductIndex] = newProduct;
    setIsLoading(false);
    print('model selectedProductIndex ${selectedProductIndex}');
    print('model selectedProductServerID ${_selectedProductServerID}');
     notifyListeners();
    return true;

Je m'attendais à ce que tout ce qui est initié par notifyListeners() soit terminé avant que la fonction "return true" ne soit activée. Ce n'est pas le cas, au contraire, le retour est exécuté et d'autres codes continuent et prennent de l'avance sur le code initié par notifyListeners().

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