Integración con Flutter y propiedad explícita del contenedor.

ProviderScope puede ser dueño de un contenedor o recibir uno externamente. Las API de Consumer mantienen el acceso a WidgetRef compatible con código al estilo Riverpod.

Propiedad de ProviderScope

La propiedad del contenedor cambia la responsabilidad del dispose.

Contenedor interno

ProviderScope(child: ...) se dispone automáticamente

Contenedor externo

ProviderScope(container: c, ...) requiere que quien lo llama ejecute c.dispose()

Scope no controlado

UncontrolledProviderScope nunca dispone el contenedor

Error común

En las pruebas de widget, recuerda disponer el ProviderContainer inyectado externamente para evitar fugas de temporizadores pendientes.

Variantes de Consumer

Todas las opciones exponen WidgetRef; elige según el estilo del widget y las necesidades del estado local.

Raíz de la app

Cuándo usar cada uno

Consumer: bloque builder local para áreas reactivas pequeñas.
ConsumerWidget: widget sin estado con build(context, ref).
ConsumerStatefulWidget: widget con estado y ref dentro de ConsumerState.

Ejemplo: ConsumerStatefulWidget

Usa ConsumerState cuando necesites tanto WidgetRef como un estado local mutable de la UI.

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),
        ),
      ],
    );
  }
}
La lógica interna de Consumer programa los rebuilds para después del frame, reduciendo los problemas de setState durante build.
Usa WidgetRef.watch solo para los valores que deban provocar rebuilds.
Mantén los side effects fuera de build; usa callbacks y los métodos invoke/refresh.

Siguientes pasos

Pruebas

Valida el ciclo de vida del contenedor, los overrides y las actualizaciones asíncronas en pruebas unitarias y de widget.

Abrir pruebas

Referencia de API

Consulta las firmas de ProviderScope, WidgetRef y los métodos del contenedor.

Abrir referencia de API