Skip to content

Hu-Wentao/flowr

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

329 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

FlowR MonoRepo


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. pub package
flowr MVVM State Management for Flutter. Adds FrViewModel, FrView, and Providers. pub package
fr_mvvm_env Environment management (Dev/Staging/Prod) with built-in Dropdown UI. pub package
fr_mvvm_locale Localization management with built-in Switch UI and easy context extensions. pub package
fr_mvvm_user User session/profile management with built-in Dropdown UI. pub package

Quick Start (FlowR)

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'),
        ],
      );
    },
  );
}

Run example:

Demo1 FlowR: for dart main.dart

flutter run examples/example/main.dart

Demo2 FlowR-MVVM: for flutter main_mvvm.dart

flutter run examples/example/lib/main_mvvm.dart

Demo3 FlowR-MVVM with Provider main_mvvm_with_provider.dart

flutter run examples/example/lib/main_mvvm_with_provider.dart

Demo4 FlowR-MVVM with DI main_mvvm_with_di.dart

flutter run examples/example/lib/main_mvvm_with_di.dart

Demo5 FlowR-MVVM with Concurrency control (debounce/throttle/mutex) 02_concurrency.mvvm.dart

flutter run examples/quick_start_mvvm/lib/02_concurrency.mvvm.dart

About

FlowR: state management package for the MVVM pattern based on reactive programming.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors