API de Flutter
ProviderScope can own a container o receive one externally. Consumer APIs keep WidgetRef access compatible con Riverpod-style code.
ProviderScope Ownership
Container ownership changes disposal responsibility.
Internal container
ProviderScope(child: ...) disposes automatically
External container
ProviderScope(container: c, ...) requires c.dispose() by caller
Uncontrolled scope
UncontrolledProviderScope never disposes the container
Common pitfall
en widget tests, remember a dispose externally injected ProviderContainer a avoid pending timer leaks.
Consumer Variants
All options expose WidgetRef; choose by widget style y local state needs.
app root
runApp(const ProviderScope(child: MyApp()));
When a use each
Consumer: local builder block for small reactive areas.
ConsumerWidget: stateless widget with build(context, ref).
ConsumerStatefulWidget: stateful widget with ref inside ConsumerState.
ejemplo: ConsumerStatefulWidget
Use ConsumerState when you need both WidgetRef y local mutable UI state.
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
Testing
Validate container lifecycle, overrides, y async updates en unit y widget tests.
Open pruebasAPI Referencia
See signatures para ProviderScope, WidgetRef, y container methods.
Open API Referencia