Flutter integration with explicit container ownership.

ProviderScope can own a container or receive one externally. Consumer APIs keep WidgetRef access compatible with 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

In widget tests, remember to dispose externally injected ProviderContainer to avoid pending timer leaks.

Consumer Variants

All options expose WidgetRef; choose by widget style and local state needs.

App root

runApp(const ProviderScope(child: MyApp()));

When to use each

Consumer: local builder block for small reactive areas.
ConsumerWidget: stateless widget with build(context, ref).
ConsumerStatefulWidget: stateful widget with ref inside ConsumerState.

Example: ConsumerStatefulWidget

Use ConsumerState when you need both WidgetRef and local mutable UI state.

home_page.dart
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),
        ),
      ],
    );
  }
}
Consumer internals schedule rebuilds to post-frame, reducing setState-during-build issues.
Use WidgetRef.watch only for values that should trigger rebuilds.
Keep side effects outside build; use callbacks and invoke/refresh methods.

Volgende stappen

Provider

Validate container lifecycle, overrides, and async updates in unit and widget tests.

Open Testing

StateProvider

See signatures for ProviderScope, WidgetRef, and container methods.

Open API Reference