Intégration Flutter avec propriété explicite du conteneur.

ProviderScope peut posséder un conteneur ou en recevoir un depuis l'extérieur. Les API Consumer gardent l'accès à WidgetRef compatible avec le code au style Riverpod.

Propriété de ProviderScope

La propriété du conteneur change la responsabilité du dispose.

Conteneur interne

ProviderScope(child: ...) se dispose automatiquement

Conteneur externe

ProviderScope(container: c, ...) exige que l'appelant fasse c.dispose()

Scope non contrôlé

UncontrolledProviderScope ne dispose jamais du conteneur

Piège courant

Dans les tests de widgets, pensez à disposer le ProviderContainer injecté depuis l'extérieur pour éviter les fuites de minuteurs en attente.

Variantes de Consumer

Toutes les options exposent WidgetRef ; choisissez selon le style du widget et les besoins d'état local.

Racine de l'application

Quand utiliser chaque variante

Consumer : bloc builder local pour les petites zones réactives.
ConsumerWidget : widget sans état avec build(context, ref).
ConsumerStatefulWidget : widget avec état et ref à l'intérieur de ConsumerState.

Exemple : ConsumerStatefulWidget

Utilisez ConsumerState lorsque vous avez besoin à la fois de WidgetRef et d'un état UI local mutable.

class HomePage extends ConsumerStatefulWidget {
  const HomePage({super.key});

  @override
  ConsumerState<HomePage> createState() => _HomePageState();
}

class _HomePageState extends ConsumerState<HomePage> {
  bool expanded = false;

  @override
  Widget build(BuildContext context) {
    final user = ref.watch(currentUser);
    return Column(
      children: [
        Text('$user'),
        Switch(
          value: expanded,
          onChanged: (v) => setState(() => expanded = v),
        ),
      ],
    );
  }
}
L'interne de Consumer planifie les rebuilds après le frame, ce qui réduit les problèmes de setState pendant le build.
N'utilisez WidgetRef.watch que pour les valeurs qui doivent déclencher un rebuild.
Gardez les effets de bord en dehors du build ; utilisez des callbacks et les méthodes invoke/refresh.

Étapes suivantes

Tests

Validez le cycle de vie du conteneur, les overrides et les mises à jour asynchrones dans les tests unitaires et widget.

Ouvrir les tests

Référence API

Consultez les signatures de ProviderScope, WidgetRef et des méthodes du conteneur.

Ouvrir la référence API