refena_riverpod_extension 1.0.0 refena_riverpod_extension: ^1.0.0 copied to clipboard
Provides extension getters to use Riverpod and Refena at the same time. Makes migration from Riverpod to Refena easier.
Provides extension getters to use Riverpod and Refena at the same time.
Checkout Refena for Riverpod developers for more information.
// Riverpod -> Refena
ref.refena.read(myRefenaProvider);
// Refena -> Riverpod
ref.riverpod.read(myRiverpodProvider);
Usage #
➤ Setup #
Add the following dependencies to your pubspec.yaml
:
# pubspec.yaml
dependencies:
flutter_riverpod: <version>
refena_flutter: <version>
refena_riverpod_extension: <version>
Wrap your app with RefenaRiverpodExtension
(below RefenaScope
and ProviderScope
):
void main() {
runApp(
ProviderScope(
child: RefenaScope(
child: RefenaRiverpodExtension(
child: MyApp(),
),
),
),
);
}
➤ Access Riverpod from Refena #
Let's say you have a StateProvider
written in Riverpod:
final riverpodCounterProvider = StateProvider((ref) => 0);
Then you can access it from Refena by using the Ref.riverpod
getter:
final refenaProvider = ViewProvider((ref) {
// This is reactive!
// The refenaProvider will be rebuilt when the riverpodCounterProvider changes.
final counter = ref.riverpod.watch(riverpodCounterProvider);
return counter.state;
});
➤ Access Refena from Riverpod #
Let's say you have a ReduxProvider
written in Refena:
final counterProvider = ReduxProvider<Counter, int>((ref) => Counter());
class Counter extends ReduxNotifier<int> {
@override
int init() => 10;
}
class AddAction extends ReduxAction<Counter, int> {
final int amount;
AddAction(this.amount);
@override
int reduce() => state + amount;
}
Then you can access it by using the Ref.refena
getter:
final riverpodProvider = Provider((ref) {
// There is no reactive way to access Refena from Riverpod.
return ref.refena.read(counterProvider);
});
final riverpodProvider2 = NotifierProvider<RiverpodCounter, int>(() {
return RiverpodCounter();
});
class RiverpodCounter extends Notifier<int> {
@override
int build() => 0;
void dispatch(int amount) {
// We can dispatch actions to Refena from Riverpod.
ref.refena.redux(counterProvider).dispatch(AddAction(amount));
}
}