Flutter状态管理-FlyingRedux

Flying Redux 是一个基于Redux状态管理的组装式flutter应用框架。

它有四个特性:

以计数器为例,仅需要5步即可使用flying redux构建应用:

import 'package:flying_redux/flying_redux.dart';

/// [State]
class PageState extends Cloneable<PageState> {
late int count; @override
PageState clone() {
return PageState()..count = count;
}
} /// [InitState]
PageState initState(Map<String, dynamic>? args) {
//just do something here...
return PageState()..count = 0;
} /// [Action]
enum CounterAction { increment } /// [ActionCreator]
class CounterActionCreator {
static Action increment() {
return const Action(CounterAction.increment, payload: 1);
}
} /// [Reducer]
buildReducer() {
return asReducer(<Object, Reducer<PageState>>{
CounterAction.increment: _increment,
});
} PageState _increment(PageState state, Action action) {
final int num = action.payload;
return state.clone()..count = (state.count + num);
} /// [Page]
class CountPage extends Page<PageState, Map<String, dynamic>> {
CountPage()
: super(
initState: initState,
reducer: buildReducer(),
view: (PageState state, Dispatch dispatch, ComponentContext<PageState> ctx) {
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
const Text(
'You have pushed the button this many times:',
),
Text(state.count.toString()),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: () => dispatch(CounterActionCreator.increment()),
tooltip: 'Increment',
child: const Icon(Icons.add),
), // This trailing comma makes auto-formatting nicer for build methods.
);
});
}

如果你需要一个完整的使用例子,请参考 /example 文件夹中的 todo-list 示例。

  • todo list - 一个简单的待办列表示例
  • 在命令行中运行:
cd ./example
flutter run

实际上,flying-redux的源码在命名和实现上与fish-redux基本类似,但是fish-redux

太长时间不更新了,基于它做了大量重构和修改,精简了很多概念,最后重新命名了它。

本文首次发表于掘金专栏文章