Flutter Riverpod context.read vs Provider dans la méthode de construction

Oct 10 2020

Dans la documentation Riverpod , il est dit:

C'est là que se context.read(myProvider)trouve une solution.

En l'utilisant, nous pourrions refactoriser notre code précédent pour:

@override 
Widget build(BuildContext context) {   
  return RaisedButton(
    onPressed: () => context.read(counterProvider).state++,
    child: Text('increment'),
  ); 
} 

Ce faisant, cliquer sur notre bouton incrémente toujours le compteur. Mais nous n'écoutons plus le fournisseur, ce qui évite les reconstructions inutiles.

Mais alors il dit:

mise en garde

Évitez d'appeler context.readà l'intérieur de la buildméthode d'un widget. Si vous souhaitez optimiser les reconstructions, extrayez plutôt la valeur écoutée dans un fournisseur.

C'est un peu déroutant pour moi. La documentation donne d'abord un exemple d'utilisation context.readà l'intérieur de la buildméthode, puis elle donne un avertissement pour l'éviter. Pourquoi?

Réponses

3 Suragch Oct 10 2020 at 16:57

La buildméthode peut être appelée plusieurs fois pendant la mise en page. Ainsi, vous devriez éviter de faire tout travail supplémentaire à l'intérieur (comme appeler une méthode sur votre modèle).

Cependant, le onPressedrappel du RaisedButtonn'est pas réellement appelé lorsqu'il buildest appelé. onPressedn'est appelé que lorsque l'utilisateur appuie sur le bouton. Ce n'est qu'alors que Riverpod lira votre fournisseur et appellera la méthode sur le modèle. L'avertissement dans la documentation ne s'applique donc pas à cette situation.