override_pod_annotation 1.0.0 override_pod_annotation: ^1.0.0 copied to clipboard
Override Pod Annotation for riverpod.
override_pod #
The override_pod
package is a tool for generating Override
variables for riverpod. This package uses annotations to automatically aggregate defined Override
variables into a single array, variableize them, and output them to a generated file.
Overview #
When overriding riverpod's Provider
, you need to set Override
variables to override the Provider
in the overrides
property of ProviderScope
. If you override many Providers
, it can be cumbersome to set many variables, but using override_pod
can alleviate that hassle.
Before #
import 'package:flutter_riverpod/flutter_riverpod.dart';
void main() {
runApp(
ProviderScope(
overrides: [
fooProvider.overrideWith(FooProviderImpl.new),
barProvider.overrideWith(BarProviderImpl.new),
bazProvider.overrideWith(BazProviderImpl.new),
quxProvider.overrideWith(QuxProviderImpl.new),
quuxProvider.overrideWith(QuuxProviderImpl.new),
corgeProvider.overrideWith(CorgeProviderImpl.new),
graultProvider.overrideWith(GraultProviderImpl.new),
],
child: const MyApp(),
),
);
}
After #
import 'package:flutter_riverpod/flutter_riverpod.dart';
void main() {
runApp(
ProviderScope(
overrides: packagePodOverrides,
child: const MyApp(),
),
);
}
Super cool!
Getting started #
Add the following to your foo/pubspec.yaml
:
dependencies:
override_pod_annotation:
dev_dependencies:
override_pod_generator:
build_runner:
Usage #
- Define variables using annotations. For example, in
foo/lib/src/repository/foo.dart
:
import 'package:override_pod_annotation/override_pod_annotation.dart';
@overridePod
final pod = fooRepositoryProvider.overrideWith(FooRepositoryImpl.new);
class FooRepositoryImpl implements FooRepository {
const FooRepositoryImpl(this.ref);
final FooRepositoryRef ref;
}
- Generate code using
build_runner
:
$ flutter pub run build_runner build
- Import the generated file and use the generated code to override the pod. For example, in
lib/main.dart
:
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:foo/override_pod.gen.dart';
void main() {
runApp(
ProviderScope(
overrides: fooPodOverrides,
child: const MyApp(),
),
);
}
Options #
You can configure options in build.yaml
.
targets:
$default:
builders:
override_pod_generator:
options:
input_file: lib/repository/**.dart
output_file: pods.gen.dart
output_value_name: pods
annotation_class: package:override_pod_generator/src/annotation.dart#Pods
input_file
- Specifies the path of the input file.
- The default is
lib/**.dart
.
output_file
- Specifies the path of the output file.
- The default is
lib/override_pod.gen.dart
.
output_value_name
- Specifies the variable name output to the output file.
- The default is
${package_name}PodOverrides
.
annotation_class
- Specifies the annotation class.
- The default is
OverridePod
.
Build #
If you build the project, try running the following command:
$ make bootstrap
And, you can run the tests with the following command:
$ melos test
License #
override_pod
is released under the BSD-3-Clause License.