fish_redux使用详解---看完就会用! (2)

reducer里面,理论上也是可以处理一些和数据相关,简单的逻辑;但是复杂的,会产生相应较大的“副作用”的业务逻辑,还是需要在effect中写

范例说明

这边写几个示例,来演示fish_redux的使用

计数器

fish_redux正常情况下的流转过程

fish_redux各模块怎么传递数据

页面跳转

A ---> B(A跳转到B,并传值给B页面)

B ---> A(B返回到A,并返回值给A页面)

列表文章

列表展示-网络请求

列表修改-单item刷新

多样式列表

列表存在的问题+解决方案

全局模块

全局切换主题

全局模式优化

大幅度提升开发体验

Component使用

page中使用component

广播

开发小技巧

弱化reducer

widget组合式开发

计数器 效果图

fish_redux中count

这个例子演示,view中点击此操作,然后更新页面数据;下述的流程,在effect中把数据处理好,通过action中转传递给reducer更新数据

view ---> action ---> effect ---> reducer(更新数据)

注意:该流程将展示,怎么将数据在各流程中互相传递

标准模式

main

这地方需要注意,cupertino,material这类系统包和fish_redux里包含的“Page”类名重复了,需要在这类系统包上使用hide,隐藏系统包里的Page类

关于页面的切换风格,可以在MaterialApp中的onGenerateRoute方法中,使用相应页面切换风格,这边使用ios的页面切换风格:cupertino

///需要使用hide隐藏Page import 'package:flutter/cupertino.dart'hide Page; import 'package:flutter/material.dart' hide Page; void main() { runApp(MyApp()); } Widget createApp() { ///定义路由 final AbstractRoutes routes = PageRoutes( pages: <String, Page<Object, dynamic>>{ "CountPage": CountPage(), }, ); return MaterialApp( title: 'FishDemo', home: routes.buildPage("CountPage", null), //作为默认页面 onGenerateRoute: (RouteSettings settings) { //ios页面切换风格 return CupertinoPageRoute(builder: (BuildContext context) { return routes.buildPage(settings.name, settings.arguments); }) // Material页面切换风格 // return MaterialPageRoute<Object>(builder: (BuildContext context) { // return routes.buildPage(settings.name, settings.arguments); // }); }, ); }

state

定义我们在页面展示的一些变量,initState中可以初始化变量;clone方法的赋值写法是必须的

class CountState implements Cloneable<CountState> { int count; @override CountState clone() { return CountState()..count = count; } } CountState initState(Map<String, dynamic> args) { return CountState()..count = 0; }

view:这里面就是写界面的模块,buildView里面有三个参数

state:这个就是我们的数据层,页面需要的变量都写在state层

dispatch:类似调度器,调用action层中的方法,从而去回调effect,reducer层的方法

viewService:这个参数,我们可以使用其中的方法:buildComponent("组件名"),调用我们封装的相关组件

Widget buildView(CountState state, Dispatch dispatch, ViewService viewService) { return _bodyWidget(state, dispatch); } Widget _bodyWidget(CountState state, Dispatch dispatch) { return Scaffold( appBar: AppBar( title: Text("FishRedux"), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Text('You have pushed the button this many times:'), ///使用state中的变量,控住数据的变换 Text(state.count.toString()), ], ), ), floatingActionButton: FloatingActionButton( onPressed: () { ///点击事件,调用action 计数自增方法 dispatch(CountActionCreator.countIncrease()); }, child: Icon(Icons.add), ), ); }

action

该层是非常重要的模块,页面所有的行为都可以在本层直观的看到

XxxxAction中的枚举字段是必须的,一个事件对应有一个枚举字段,枚举字段是:effect,reducer层标识的入口

XxxxActionCreator类中的方法是中转方法,方法中可以传参数,参数类型可任意;方法中的参数放在Action类中的payload字段中,然后在effect,reducer中的action参数中拿到payload值去处理就行了

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsxfxz.html