overrideWith method

Override overrideWith(
  1. EntityCrud<T> create<T extends Object>()
)

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 overrideWith(EntityCrud<T> Function<T extends Object>() create) =>
    $FamilyOverride(
      from: this,
      createElement: (pointer) {
        final provider = pointer.origin as EntityCrudProvider;
        return provider._captureGenerics(<T extends Object>() {
          provider as EntityCrudProvider<T>;
          return provider.$view(create: create<T>).$createElement(pointer);
        });
      },
    );