overrideWith method
Override the behavior of this provider with a custom implementation.
disposeNotifierallows changing ChangeNotifierProvider.disposeNotifier for the override. If null, the override will use the same value as the original provider.
Override the provider with a new initialization function.
This will also disable the auto-scoping mechanism, meaning that if the
overridden provider specified dependencies, it will have no effect.
The override must not specify a dependencies.
Some common use-cases are:
- testing, by replacing a service with a fake implementation, or to reach a very specific state easily.
- multiple environments, by changing the implementation of a class based on the platform or other parameters.
This function should be used in combination with ProviderScope.overrides
or ProviderContainer.overrides:
final myService = Provider((ref) => MyService());
runApp(
ProviderScope(
overrides: [
// Replace the implementation of the provider with a different one
myService.overrideWith((ref) {
ref.watch('other');
return MyFakeService(),
})),
],
child: MyApp(),
),
);
Implementation
@override
Override overrideWith(Create<NotifierT> create, {bool? disposeNotifier}) {
return $ProviderOverride(
origin: this,
providerOverride: $view(create: create, disposeNotifier: disposeNotifier),
);
}