小言_互联网的博客

Flutter笔记--flutter-redux

299人阅读  评论(0)

         这一节主要了解flutter-redux的用法,redux之前是用在React中的状态管理,一般较大型React项目用的较多,简单了解一下一些概念: (1)store:是保存数据的地方,整个应用只能有一个 Store ,Store 有十分重要的方法 dispatch(action) 来发送 Action。(2)State,是某个时间点的数据快照, 一个 State 对应一个 View,只要 State 相同,View 就相同。(3)Action:是 View 发出的通知,通过 Reducer 使 State 发生变化。(4)Reducer: 是一个纯函数,接受 Action 和当前 State 作为参数,返回一个新的 State,主要是做一些业务逻辑处理。(5)Middleware: 中间件,它的操作在发出 Action 和执行 Reducer 这两步之间发生,用于增加额外功能,如处理异步操作或者打印日志功能等。

          flutter-redux是借鉴redux设计的。它里面涉及关键API如下: (1)StoreProvider:是一个InheritedWidget,用在应用的父布局,用来传递Store. (2)StoreConnector, 一个可以接收Store的Widget,响应Store发出的状态改变事件,然后重新渲染UI。它里面有两个关键参数 一个是converter,用来将store转化为ViewModel,另一个是builder,builder作用是将ViewModel转化为UI布局。看一个栗子:


  
  1. pubspec.yaml:
  2. redux: ">=5.0.0 <6.0.0"
  3. flutter_redux: ^ 0.8 .2
  4. import 'package:flutter/material.dart';
  5. import 'package:flutter_redux/flutter_redux.dart';
  6. import 'package:redux/redux.dart';
  7. enum Actions { Increment }
  8. int counterReducer(int state, dynamic action) {
  9. if (action == Actions.Increment) {
  10. return state + 1;
  11. }
  12. return state;
  13. }
  14. void main() {
  15. final store = Store<int>((int state,dynamic action) {
  16. if(action == Actions.Increment) {
  17. return state + 1;
  18. }
  19. return state;
  20. }, initialState: 0);
  21. runApp( new MyApp(store: store));
  22. }
  23. class MyApp extends StatelessWidget {
  24. final Store<int> store;
  25. MyApp({Key key, this.store}) : super(key: key);
  26. @override
  27. Wid get build( BuildContext context) {
  28. //将 Redux Store传递给它的子Widget
  29. return StoreProvider<int>(store: store,
  30. child: MaterialApp(
  31. home: MyHome(),
  32. ));
  33. }
  34. }
  35. class MyHome extends StatefulWidget {
  36. @override
  37. _MyHomeState createState() => _MyHomeState();
  38. }
  39. class _MyHomeState extends State<MyHome> {
  40. @override
  41. Wid get build( BuildContext context) {
  42. return Scaffold(
  43. appBar: AppBar(title: Text( "Hello"),),
  44. floatingActionButton: StoreConnector<int,VoidCallback>(
  45. //将Action进行分发
  46. converter: (store) => () => store.dispatch(Actions.Increment),
  47. builder: (context,cb) => FloatingActionButton(
  48. onPressed: cb,
  49. child: Icon(Icons.add),
  50. ),
  51. ),
  52. body: Column(
  53. mainAxisAlignment: MainAxisAlignment.center,
  54. children: <Widget>[
  55. //能够接收store
  56. StoreConnector<int,String>(
  57. converter: (store) => store.state.toString(),
  58. builder: (context,count) {
  59. return Center(child: Text('$count'),);
  60. },
  61. )
  62. ],
  63. ),
  64. );
  65. }
  66. }

 


转载:https://blog.csdn.net/ljt2724960661/article/details/116307211
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场