A predictable state management library that helps implement the BLoC design pattern.
| Package | Desc | Pub |
|---|---|---|
| flowr_dart | Base FlowR library for pure Dart. Core logic for state and concurrency. | |
| flowr | MVVM State Management for Flutter. Adds FrViewModel, FrView, and Providers. | |
| fr_mvvm_env | Environment management (Dev/Staging/Prod) with built-in Dropdown UI. | |
| fr_mvvm_locale | Localization management with built-in Switch UI and easy context extensions. | |
| fr_mvvm_user | User session/profile management with built-in Dropdown UI. |
dart pub add flowr/// 0. define Model
class CounterModel {
int value;
CounterModel(this.value)
}
/// 1. define ViewModel
class CounterViewModel extends FrViewModel<CounterModel> {
@override
final CounterModel initValue;
CounterViewModel({required this.initValue});
incrementCounter() =>
update((old) {
logger('incrementCounter: $old');
return old..value += 1;
});
}
/// ------------------------------------------
main() {
/// 2.a create global ViewModel instance
final counter = CounterViewModel(initValue: CounterModel(0));
/// 2.b.1 Or use Provider register ViewModel instance
FrProvider(
(c) => CounterViewModel(initValue: CounterModel(1)),
child: YourApp(), // ...
);
// 2.b.2 get instance from Provider
final counter = context.read<CounterViewModel>();
/// 2.c.1 Or use DI register ViewModel instance
GetIt.I.registerSingleton<Counter>(Counter(initValue: 0));
// 2.c.2 get instance
final counter = context.readGlobal<CounterViewModel>();
/// ------------------------------------------
/// 3.a read Model from ViewModel by StreamBuilder
StreamBuilder(
stream: counter.stream,
builder: (context, snapshot) {
return Text(
'${snapshot.data}',
style: Theme
.of(context)
.textTheme
.headlineMedium,
);
},
);
/// 3.b / 3.c use ViewModel by FrStreamBuilder / FrView
FrStreamBuilder(
vm: context.read<CounterViewModel>(),
stream: (vm) => vm.stream,
builder: (context, snapshot) {
return Column(
children: [
Text('${snapshot.data}'),
Text('Get vm by `snapshot.vm` [${snapshot.vm.runtimeType}]instance'),
],
);
},
);
}Demo1 FlowR: for dart main.dart
flutter run examples/example/main.dartDemo2 FlowR-MVVM: for flutter main_mvvm.dart
flutter run examples/example/lib/main_mvvm.dartDemo3 FlowR-MVVM with Provider main_mvvm_with_provider.dart
flutter run examples/example/lib/main_mvvm_with_provider.dartDemo4 FlowR-MVVM with DI main_mvvm_with_di.dart
flutter run examples/example/lib/main_mvvm_with_di.dartDemo5 FlowR-MVVM with Concurrency control (debounce/throttle/mutex) 02_concurrency.mvvm.dart
flutter run examples/quick_start_mvvm/lib/02_concurrency.mvvm.dart