Flutter Riverpod context.read vs Provider in der Erstellungsmethode

Oct 10 2020

In der Riverpod- Dokumentation heißt es:

Hier context.read(myProvider)liegt eine Lösung.

Mit ihm könnten wir unseren vorherigen Code umgestalten, um:

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

Wenn Sie auf unsere Schaltfläche klicken, wird der Zähler weiterhin erhöht. Wir hören jedoch nicht mehr auf den Anbieter, wodurch unnötige Neuerstellungen vermieden werden.

Aber dann heißt es:

Vorsicht

Vermeiden Sie es, context.readinnerhalb der buildMethode eines Widgets aufzurufen . Wenn Sie Neuerstellungen optimieren möchten, extrahieren Sie stattdessen den in einem Provider abgehörten Wert.

Das ist ein bisschen verwirrend für mich. Zuerst enthält die Dokumentation ein Beispiel für die Verwendung context.readinnerhalb der buildMethode und dann eine Warnung, um dies zu vermeiden. Warum?

Antworten

3 Suragch Oct 10 2020 at 16:57

Die buildMethode kann während des Layouts mehrmals aufgerufen werden. Daher sollten Sie zusätzliche Arbeiten vermeiden (z. B. das Aufrufen einer Methode für Ihr Modell).

Der onPressedRückruf des wird RaisedButtonjedoch nicht aufgerufen, wenn er buildaufgerufen wird. onPressedwird nur aufgerufen, wenn der Benutzer die Taste drückt. Erst dann liest Riverpod Ihren Provider und ruft die Methode für das Modell auf. Daher gilt die Warnung in der Dokumentation in dieser Situation nicht.