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),
),
],
);
}
}
Siguientes pasos
Pruebas
Valida el ciclo de vida del contenedor, los overrides y las actualizaciones asíncronas en pruebas unitarias y de widget.
Abrir pruebasReferencia de API
Consulta las firmas de ProviderScope, WidgetRef y los métodos del contenedor.
Abrir referencia de API