[Flutter] fish_redux自定义tabController
2022/3/6 6:15:06
本文主要是介绍[Flutter] fish_redux自定义tabController,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
fish_redux自定义tabController
STEP01 page
///混入SingleTickerProviderMixin class TabbarPage extends Page<TabbarState, Map<String, dynamic>> with SingleTickerProviderMixin<TabbarState> { ... ... }
STEP02 effect
/// effect 在生命周期里初始化controller Effect<TabbarState>? buildEffect() { return combineEffects(<Object, Effect<TabbarState>>{ Lifecycle.initState:_iniController, }); }
///effect void _iniController(Action action, Context<TabbarState> ctx) { ///--------------初始化Tabcontroller----------- final TickerProvider tickerProvider = ctx.stfState as TickerProvider; var _controller =TabController(vsync: tickerProvider,length: ctx.state.tabList.length); ///监听controller _controller.addListener((){ println(_controller.index); }); ///闭包,发送意图,只不过闭包方法写很多个,相当于下面的方法 ///ctx.dispatch(TabbarActionCreator.onChangeTabListAction({'controller':_controller})); ctx.dispatch(TabbarActionCreator.modify((clone) { clone.controller = _controller; })); }
STEP03 action
///action typedef CloneFunc = Function(TabbarState clone); enum TabbarAction {modify}
///action 通知reducer static Action modify(CloneFunc func){ return Action(TabbarAction.modify,payload: func); }
STEP04 reducer
///reducer Reducer<TabbarState>? buildReducer() { return asReducer( <Object, Reducer<TabbarState>>{ TabbarAction.modify: _modify, }, ); }
///reducer TabbarState _modify(TabbarState state, Action action) { final cloneFunc = action.payload as CloneFunc; ///调用state的clone函数,将当前state克隆一份给newState final TabbarState newState = state.clone(); cloneFunc(newState); ///返回newState return newState; }
STEP05 state
///state是事先定义好,等着reducer来调用这里的clone方法 class TabbarState implements Cloneable<TabbarState> { TabController? controller; @override TabbarState clone() { return TabbarState() ..controller = controller; } }
STEP06 view
///view 调用state.controller TabBar( indicatorColor: Colors.blue, labelColor: Colors.red, labelStyle: TextStyle(fontSize: 20), controller: state.controller, isScrollable: true, tabs: [Tab(child: Text('美食')),Tab(child: Text('食品')),Tab(child: Text('日用')),Tab(child: Text('花植')),Tab(child: Text('保健')),Tab(child: Text('生活'))] )
///view 调用state.controller TabBarView( controller: state.controller, children: <Widget>[ //美食 viewService.buildComponent('listComponent'), //食品 viewService.buildComponent('list2Component'), //日用 viewService.buildComponent('list3Component'), //花植 viewService.buildComponent('list4Component'), //保健 viewService.buildComponent('list5Component'), //生活 viewService.buildComponent('list6Component'), ], )
这篇关于[Flutter] fish_redux自定义tabController的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-29Elasticsearch慢查询日志配置
- 2024-05-29揭秘华为如此多成功项目的产品关键——Charter模板
- 2024-05-29海外IDC业务拓展的7大挑战
- 2024-05-29InLine Chat功能优化对标Github Copilot,CodeGeeX带来更高效、更直观的编程体验!
- 2024-05-29CodeGeeX 智能编程助手 6 项功能升级,在Visual Studio插件市场霸榜2周!
- 2024-05-29AutoMQ 生态集成 Apache Doris
- 2024-05-292024年IDC行业的深度挖掘:机遇、挑战与未来展望
- 2024-05-29五款扩展组件齐发 —— Volcano、Keda、Crane-scheduler 等,邀你体验
- 2024-05-29AutoMQ 对象存储数据高效组织的秘密: Compaction
- 2024-05-29活动预告|来 GIAC 大会听大数据降本利器:AutoMQ 基于云原生重新设计的 Kafka