ConsumerWidget et ref.watch
Fait partie de la section Gestion d’état du Journey Flutter de Coddy. Leçon 17 sur 27.
N’importe quel widget peut lire un fournisseur dès qu’il peut obtenir un ref. Pour lui en fournir un, modifie deux choses :
extends StatelessWidgetdevientextends ConsumerWidget.buildreçoit un deuxième paramètre,WidgetRef ref.
class CityName extends ConsumerWidget {
const CityName({super.key});
@override
Widget build(BuildContext context, WidgetRef ref) {
final city = ref.watch(cityProvider);
return Text(city);
}
}ref.watch(cityProvider) te donne la valeur du fournisseur, ici le texte Lisbon, et reconstruit le widget chaque fois que cette valeur change. Sans ref.watch, cityProvider désigne uniquement le fournisseur lui-même, pas sa valeur.
Chaque widget qui a besoin d’une valeur la demande ainsi, où qu’il se trouve. Rien n’est transmis par les constructeurs, et rien n’a besoin de context pour la trouver.
Défi
FacileCityName et Temperature affichent des espaces réservés. Faites-leur lire les fournisseurs en haut du fichier :
- Transformez-les tous les deux en
ConsumerWidget. CityNameaffiche la valeur decityProvider.Temperatureaffiche la valeur detemperatureProvidersuivie de°C, à la même taille.
Essayez vous-même
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
final cityProvider = Provider((ref) => 'Lisbon');
final temperatureProvider = Provider((ref) => 21);
void main() {
runApp(const ProviderScope(child: MyApp()));
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
appBar: AppBar(title: const CityName()),
body: const Center(child: Temperature()),
),
);
}
}
class CityName extends StatelessWidget {
const CityName({super.key});
@override
Widget build(BuildContext context) {
return const Text('City');
}
}
class Temperature extends StatelessWidget {
const Temperature({super.key});
@override
Widget build(BuildContext context) {
return const Text('0°C', style: TextStyle(fontSize: 64));
}
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Gestion d’état
1Remonter l’état
Transmettre l’état à un composant enfantTransmettre une fonction de rappel à un composant enfantFonctions de rappel qui transmettent une valeurRemonter l’état4Riverpod
Riverpod : ProviderScopeConsumerWidget et ref.watchRiverpod : StateProviderRiverpod : NotifierLes providers qui observent d’autres providersChoisir où réside l’étatEntraînez-vous par vous-même : Compilateur Flutter en ligne