Purpose
Easy to use awesome package Riverpod for some design pattern
I created this package to use Riverpod's Provider like the ListView and PageView widgets that are implemented in the Flutter standard.We believe that someone with experience in Flutter development can handle it easily.
View (builder)
@override
Widget build(BuildContext context) {
// wrap this buider
return RiverpodBuilder(
// set use provider
provider: firstViewModelProvider,
builder: (context, ref, vm, state, reader) {
return Scaffold(
appBar: AppBar(
title: const Text('First View'),
automaticallyImplyLeading: false,
)
...
arguments
name | mean |
---|---|
provider |
riverpod provider |
builder |
use it like a ListView or PageView |
showlog |
setting whether to display the Log |
builder property
name | mean |
---|---|
context |
means Build Context |
ref |
means WidgetRef |
vm (notifier) |
ref.watch(provider.notifier); |
state |
ref.watch(provider); |
reader |
ref.read(provider.notifier); |
log
View Model
class FirstViewModel extends BaseViewModel<FirstViewState> {
@override
get instanse => const FirstViewState();
int get count => state.count;
// listen other provider
SecondViewModel get secondVM =>
widgetRef.read(secondViewModelProvider.notifier);
@override
void onInit() async{
// Asynchronous processing is also possible .
await Future.delayed(const Duration(seconds: 1));
super.onInit();
}
void addCount() {
state = state.copyWith(count: state.count + 1);
}
void showNextView() {
// has context(Build Context)
// no arguments need to be passed.
Navigator.of(context).pushNamed("second_view");
}
...
property
name | mean |
---|---|
context |
means Build Context |
ref |
means PrividerRef |
widgetRef |
means WidgetRef |
state |
this state |
method
name | mean |
---|---|
onInit |
call when this class init. (Asynchronous processing is also possible) |
onDispose |
call when this class close. |
refreshProvider |
use invalidate(refresh) other provider. |
Preview
Status of support Providers type
※ This package requires Riverpod 2 or higher.
corresponding
builder | provider type | BaseVM |
---|---|---|
RiverpodBuilder |
NotifierProvider | BaseViewModel |
KeepRiverpodBuilder |
AutoDisposeNotifierProvider | KeepBaseViewModel |
currently we offer two types of builder.
We plan to increase the types of providers supported and adapte to hooks in the near future.
supplementary information
We know that many people use stateNotifierProvier in this case.
However, since the Riverpod developers recommend the use of NotifierProvider, we decided to be the first to respond.
Extended package
Extending this package is very easy.
ex : The case where you want to define common Methods that you want to use in all VM...
- In that case, create an extension class for
InnerViewModel
after defining other providers..
import 'package:fluttertoast/fluttertoast.dart';
extension InnerViewModelEXT on InnerViewModel {
// OverlayLoadingView.provider = provider to manage loading
bool get isLoading => providerRef.read(OverlayLoadingView.provider);
// show Loading
void showLoading() {
providerRef.read(OverlayLoadingView.provider.notifier).show();
}
// hide Loading
void hideLoading() {
providerRef.read(OverlayLoadingView.provider.notifier).hide();
}
void showAlert(String message) {
// alert method
}
void showToast(String message) {
// other packages can be defined and used here as well.
Fluttertoast.showToast(
msg: message, toastLength: Toast.LENGTH_SHORT, timeInSecForIosWeb: 1);
}
}
Writing Documents more detail...
Libraries
- view_model/src/base_view_model
- log/src/color_log
- builder/src/notifier/keep_riverpod_builder
- builder/src/auto_dispose_notifier/riverpod_builder
- builder/builder
- builder packages.
- riverpod_builder
- Easy to use awesome package Riverpod for some design pattern. I created this package to use Riverpod's Provider like the ListView andPageView widgets that are implemented in the Flutter standard. We believe that someone with experience in Flutter development can handle it easily.
- view_model/view_model
- view model packages.
- log/log
- log packages.