“莆仙小館”——莆田文化展示APP 文化展示程式目的在於應用科學技術助推家鄉優秀傳統文化的展示與交流。通過圖片、視頻、音頻等展示方式向用戶立體地展示一個文化城邦。傳統文化與科學技術的有效融合,順應了社會發展的需要。傳統文化與科學技術的有效融合是發展中國特色社會主義文化的客觀需要,是傳承中國優秀傳統文 ...
簡介
Flying Redux 是一個基於Redux狀態管理的組裝式flutter應用框架。
它有四個特性:
- 函數式編程
- 可預測的狀態
- 插拔式的組件化
- 支持null safety 和 flutter 3.x
如何開始
以計數器為例,僅需要5步即可使用flying redux構建應用:
- 引入 flying_redux
- 創建狀態類和初始化狀態
- 定義 Action 和 ActionCreator
- 創建修改狀態的 Reducer
- 創建組件或頁面視圖以顯示
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
太長時間不更新了,基於它做了大量重構和修改,精簡了很多概念,最後重新命名了它。
本文首次發表於掘金專欄文章