Flutter fish redux入门

自建邮局服务器| 批量邮件群发系统PowerMTA+oem(mumara,mailwizz, interspire) 世界顶级自建邮局服务器PowerMTA+oem(mumara,mailwizz, interspire) PowerMTA4.5(最好用的 群发邮件软件)是用于大批量多ip开发的邮件传递邮寄。可按每小时发送数近百万条电子邮件,发送IP地址和域可以详细配置,加上目前流行前端oem,mumara,mailwizz, interspire等,可定时发送,定时重复发送,实现全自动化 邮件群发 方案。 官网(powermta4.5下载) https://www.sparkpost.com/powermta/ 使用Po 阅读详情
fish redux

本分主要介绍闲鱼出品的fish redux基础知识和使用,后续会有复杂应用场景分享。

flutter自带demo
void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MyHomePage(title: 'Flutter Demo Home Page'),
      debugShowCheckedModeBanner: false,
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);
  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text('$_counter'),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ),
    );
  }
}

flutter的计数demo,方便后面对比。

redux

简介Redux的流程
redux流程

简单说就是用户操作dispatcher(action),到reducer中处理相关数据和逻辑,存储数据到store中,更新state,触发UI刷新。

fish redux

部分重要概念

  1. component
    对局部的展示和功能的封装。对功能细分为修改数据的功能(Reducer)和非修改数据的功能(副作用Effect)。于是有了View、Effect、Reducer组件三要素。
  2. action
  • Action 包含两个字段
    • type
    • payload
  • 推荐的写法是
    • 为一个组件|适配器创建一个 action.dart 文件,包含两个类
      • 为 type 字段起一个枚举类
      • 为 Action 的创建起一个 ActionCreator 类,这样利于约束 payload 的类型。
    • Effect 接受处理的 Action,以 on{Verb} 命名
    • Reducer 接受处理的 Action,以{verb} 命名
    • 示例代码
enum MessageAction {
    onShare,
    shared,
}

class MessageActionCreator {
    static Action onShare(Map<String, Object> payload) {
        return Action(MessageAction.onShare, payload: payload);
    }

    static Action shared() {
        return const Action(MessageAction.shared);
    }
}
  1. reducer
  • Reducer 是一个上下文无关的 pure function。它接收下面的参数
    • T state
    • Action action
  • 它主要包含三方面的信息
    • 接收一个“意图”, 做出数据修改。
    • 如果要修改数据,需要创建一份新的拷贝,修改在拷贝上。
    • 如果数据修改了,它会自动触发 State 的层层数据的拷贝,再以扁平化方式通知组件刷新。
  • 示例代码
Reducer<String> buildMessageReducer() {
  return asReducer(<Object, Reducer<String>>{
    'shared': _shared,
  });
}

String _shared(String msg, Action action) {
  return '$msg [shared]';
}

class MessageComponent extends Component<String> {
    MessageComponent(): super(
            view: buildMessageView,
            effect: buildEffect(),
            reducer: buildMessageReducer(),
        );
}
  1. effect
    接收View的"意图",也包括对生命周期的回调。不修改数据,它对数据是只读的,如果要修改,应该发送一个Action到Reducer中去处理。
cunter fish redux 版

基础目录
> -action.dart
> -effect.dart(本例中非必须)
> -page.dart
> -reducer.dart
> -state.dart
> -view.dart

action.dart

enum CounterAction { add, onAdd }

class CounterActionCreator {
  //reducer使用
  static Action add() {
    return const Action(CounterAction.add);
  }
  //effect使用
  static Action onAdd() {
    return const Action(CounterAction.onAdd);
  }
}

state.dart

class CounterState implements Cloneable<CounterState> {
  int count = 0;

  @override
  CounterState clone() {
    return CounterState()..count = count;
  }
}

CounterState initState(Map<String, dynamic> args){
  //什么也没做,只是初始化数据
  return CounterState();
}

reducer.dart

Reducer<CounterState> buildReducer() {
  return asReducer<CounterState>(<Object, Reducer<CounterState>>{
    CounterAction.add: _add,
  });
}

CounterState _add(CounterState state, Action action) {
  final CounterState newState = state.clone();
  newState.count = ++state.count;
  return newState;
}

effect.dart

Effect<CounterState> buildEffect() {
  return combineEffects(<Object, Effect<CounterState>>{
    CounterAction.onAdd: _onAdd,
  });
}

void _onAdd(Action action, Context<CounterState> ctx) {
  print("_onAdd");
  ctx.dispatch(CounterActionCreator.add());
}

view.dart

Widget buildView(
    CounterState state, Dispatch dispatch, ViewService viewService) {
  return Scaffold(
    appBar: AppBar(
      title: Text('CounterFishRedux'),
    ),
    body: Center(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          Text(
            state.count.toString(),
          )
        ],
      ),
    ),
    floatingActionButton: FloatingActionButton(
      //发送的action到了Effect中处理
      onPressed: () => dispatch(CounterActionCreator.onAdd()),
      //也可以发action到reducer中处理
      //onPressed: () => dispatch(CounterActionCreator.add()),
      tooltip: 'add',
      child: Icon(Icons.add),
    ),
  );
}

page.dart

class CounterFishReduxPage extends Page<CounterState, Map<String, dynamic>> {
  CounterFishReduxPage()
      : super(
          initState: initState,
          effect: buildEffect(),
          reducer: buildReducer(),
          view: buildView,
        );
}

​ 在view.dart中,用户触发FloatingActionButton的onPress事件,dispatch了名为onAdd的Action,在effect.dart中接收到action,会继续dispatch,到reducer.dart中(这一步非必须,可以直接dispatch到reducer.dart中),在reducer.dart中,在state中取出state中的数据,处理(加一)后,返回state,数据更新到store中,触发UI更新,最终到view.dart中state中的数据会更新,取出新的数据显示。

​ fish redux适用于中大型项目,这种简单的功能直接用官方的setState即可。

​ 这样就可以单独作为一个page或者component使用,没有逻辑和UI的耦合。

更多更新关注微信公众号“Flutter入门” 知乎专栏同名
Flutter入门

Lasso的原理及其与其他特征选择方法的比较进行阐述,然后讨论Lasso优点、缺点以及应用场景,最后给出了代码实例 在机器学习领域中,特征选择(feature selection)是指在模型训练前对数据集进行分析,选择其中有助于预测目标变量或影响模型性能的特征,去除不相关或冗余的特征,提升模型的泛化能力。而Lasso回归是一种很流行的用于特征选择的方法之一。Lasso回归(又称LASSO,least absolute shrinkage and selection operator)是一种线性模型中的特征选择方法。 阅读详情

相关推荐

【操作系统】 Operation System 第一章:概述

B站 陈渝老师 清华大学 https://www.bilibili.com/video/av6538245?from=search&seid=436175425155932048 相关资料(源自B站下方评论区) https://www.shiyanlou.com/courses/221 配套上机实验地址 https://b23.tv/av18273642/p1 这个适合跨考和基础薄弱的 h...

iwanderu的博客 4万+

Fish Redux

Fish ReduxFish Redux使用说明基础使用Fish-Redux组成部分工作流程配置环境引入Fish-Redux安装FishReduxTemplateFishReduxTemplate使用说明Fish Redux 的优点及原理数据的集中管理组件的分治管理View、Reducer、Effect 隔离良好的扩展性精小、简单、完备官方文档以及源码项目实践 Fish Redux使用说明 Fis...

TLuffy的博客 2828

SAR成像系列:【3】合成孔径雷达(SAR)的二维回波信号与简单距离多普勒(RD)算法 (附matlab代码)

二维回波信号分析

zr2006_7的专栏 2万+

手把手入门Fish-Redux开发flutter(上)

本文适合已经入门flutter,没有了解过Redux,但对Fish-Redux感兴趣的同学。 1 Fish-Redux介绍 众所周知,redux是一个前端的状态管理框架。 而Fish-Redux是阿里闲鱼团队开发的flutter应用框架。用其官方文档的原文描述就是“Fish Redux 是一个基于 Redux 数据管理的组装式 flutter 应用框架, 它特别适用于构建中大型的复...

大灰狼的小绵羊哥哥的博客 4322

使用LaTex写IEEE trans 论文的参考文献(bib)

(1)在.TeX文件的最下方添加这几行内容,主要为生成tran形式的参考文献,第二行为参考文献名称,我命名为reference.bib,所以写的是reference,要根据自己的命名改写。(5)如果要在文中引用的话,就在.tex文件中添加\cite{},中括号里面内容为方框圈出来部分,但引用之后,在参考文献后面会出现[1]这样的标识,不知道为什么。(4)完成(3)以后,点击工具-命令-LaTeX,编译,然后按照此步骤LaTeX-bibtex-LaTeX-LaTeX,就可以完成参考文献的导入。

qq_45884215的博客 6259

量化回测系统实战指南:从VectorBT到自研框架的深度解析

本文深入解析量化回测系统实战,从VectorBT和Backtesting.py的对比到自研框架miniQuant的设计与优化。探讨如何平衡速度与灵活性,解决实盘适配性问题,并提供性能调优技巧和可视化分析工具,帮助开发者构建高效可靠的量化交易系统。

weixin_28308325的博客 277

fish_redux使用详解---看完就会用!

说句心里话,这篇文章,来来回回修改了很多次,如果认真看完这篇文章,还不会写fish_redux,请在评论里喷我。 前言 来学学难搞的fish_redux框架吧,这个框架,官方的文档真是一言难尽,比flutter_bloc官网的文档真是逊色太多了,但是一旦知道怎么写,页面堆起来也是非常爽呀,结构分明,逻辑也会错落有致。 其实在当时搞懂这个框架的时候,就一直想写一篇文章记录下,但是因为忙(lan),导致一直没写,现在觉得还是必须把使用的过程记录下,毕竟刚上手这个框架是个蛋痛的过程,必须要把这个过程做个记录

chuyouyinghe的专栏 1768

避开生产计划大坑:不懂MPS和MRP的区别,你的SAP PP模块白学了

本文深入解析SAP PP模块中MPS(主生产计划)与MRP(物料需求计划)的核心区别,揭示如何通过正确配置避免生产计划中的常见陷阱。文章详细探讨了MPS的三大缓冲特性和动态平衡算法,帮助企业提升生产计划稳定性,优化资源配置,避免生产线波动。

weixin_29268267的博客 402

flutter fish-redux的使用

看到闲鱼开源关于flutter的框架fish-redux,于是尝尝鲜,官方有个demo试着跑了一下,看了代码感觉有意思,之前一直做安卓原生开发,对这种框架挺感兴趣的,所以想了解下,毕竟是关于flutter的,本人还是比较热衷于flutter的。这里是说一下自己怎么使用的,做了个demo,切换主题颜色可删除listview item等。至于该框架各模块使用传送门:fish-redux 使用前介绍个...

qq_19764133的博客 3881

android mtk camera如何自定义默认拍照与录像分辨率

本文详细解析了在Android MTK平台上自定义相机默认拍照与录像分辨率的方法。通过分析Camera2应用默认选择逻辑,定位并修改PictureSize.java与VideoQualityCaptureRequestConfig.java中的关键代码,实现绕过系统智能选择,强制指定最高或特定分辨率。文章还提供了进阶的可配置化方案与验证避坑指南,帮助开发者精准控制相机行为。

weixin_29194817的博客 434

基于UWB技术的自动跟随避障系统设计研究

基于UWB技术的自动跟随避障系统设计研究 摘要:目前我国针对自动跟随避障系统方面的研究较少,同时国内自动跟随避障系统仍然处在未成熟阶段,多数仍停留在应用蓝牙控制或摄像头捕捉这类跟随方式,但这类方式在实际应用过程中往往会出现易受干扰,精度差,易受环境干扰等问题,这不仅会降低自动跟随避障系统的性能,同时也会对用户造成诸多困扰。因此,就需要结合目前较为有效的UWB技术,对自动跟随避障系统进行设计。基于此,本文首先将会针对UWB技术展开概述,而后对基于UWB技术的自动跟随避障系统组成展开分析,进而对基于UWB技术的

qq_43543515的博客 7992

SparkShell 启动报错,在线等大神解决,急!!!!

[root@hadoop01 bin]# ./spark-shell --master spark://hadooplog4j:WARN No appenders could be found for logger (org.apalog4j:WARN Please initialize the log4j system properly.log4j:WARN See http://logging...

Snow_Face的博客 1826

解决微信小程序长页面滚动到底部点击底部的输入框后输入框漂浮且页面滚动到顶部

一、问题描述 项目中有一个长页面上部展示部分信息下部为信息录入,页面长度为三屏幕(不同手机屏幕大小略有差异),当滚动到第二屏或者第三屏去填写信息时点击输入框后输入框漂浮起来了并且页面向上滚动了一段距离,回到了第一屏中展示的内容。效果如图。 滚动到第二屏,证件号输入。 点击输入框 可以看到证件号输入框漂浮了起来并且页面滚动到了第一屏展示的内容。 注意:小程序是2018年上线,在2020年4月份之前该页面从未出现过这种现象。推测:微信的后续更新中对微信小程序基础库进行了重构,导致点击输入框后页

仰望星空的代码 3261

在线等。 急~

xieben的专栏 686

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

急,在线等!!!!!

** 急,在线等!!!!! ** 急求错哪了,如何解决

soso9998877的博客 226

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

在线急等高手解决PHP的问题~~~~~~~~~~~~~有木有!!!!

<br />Warning: require(E:/WampServer/wamp/www/mybiets/www/wp-includes/functions.php) [function.require]: failed to open stream: No such file or directory in E:/WampServer/wamp/www/mybiets/www/wp-settings.php on line 266<br /> <br />我点连接之后 出现了这个问题  求高手解答

az5415415的专栏 402

android 分页问题,关于分页的有关问题,在线急等

当前位置:我的异常网» Android»关于分页的有关问题,在线急等关于分页的有关问题,在线急等www.myexceptions.net网友分享于:2014-10-12浏览:0次关于分页的问题,在线急等运行程序,没有显示出数据,而是弹出Toast"没有更多数据了...."求解publicclassMainActivityextendsActivity{privateList...

weixin_31014835的博客 115

这个要怎么做,急在线等

weixin_46519239的博客 91

急求大数分解c++代码!!!!

大佬们有没有现成的大数分解的c++代码,不会报错能直接跑的,rho算法,二次筛法,椭圆曲线都可以。

siqi_Yang的博客 469

[VB.NET]一些小问题!!!!急急。在线等

<!--google_ad_client = "pub-8333940862668978";/* 728x90, 创建于 08-11-30 */google_ad_slot = "4485230109";google_ad_width = 728;google_ad_height = 90;//--><script type="text/javascript"

VB.NET学习网-VB.NET实例、VB.NET教程、VB.NET源码下载 610

有没有大佬帮我解决下问题??谢谢!在线等,捉急,要哭了!

这是我在使用Python通过PIKA库操作RabbitMQ时产生的错误 python版本是3.7 pika库是1.0.1 RabbitMQ版本是rabbitmq_server-3.7.14 下面是具体代码:send.py import pika username="guest" pwd="guest" user_pwd=pika.PlainCredentials(username,pwd) #...

qq_36290131的博客 353

arduino烧写失败_Arduino UNO 烧录失败 在线等 急!!!!

该楼层疑似违规已被系统折叠隐藏此楼查看此楼avrdude: stk500_recv(): programmer is not respondingavrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0xf6avrdude: stk500_recv(): programmer is not respondingavrdude: ...

weixin_31957989的博客 3726

急!!!安装VS2005报错!!!!

系统是Window server 2003 我之前装过一次VS2005,后来卸载掉了,现在要从新安装可是报错了! 错误信息是:安装microsoft .NET framework 2.0时出错! 怎么能够解决啊??   在线急等!!!

xiaoxin25184的专栏 384

ViewPager中的焦点问题,急,在线等

我写了一个自定义的View。这个自定义的view中实现了OnTouchEvent的方法。并且在OnTouchEvent的方法中return true;这个方法中监听的是手指在View上左右滑的过程。 我把这个自定义的控件放到ViewPager中,因为ViewPager本身就有左右滑动的功能。 现在的情况是,我的view控件监听左右滑,只能监听很短的一段距离,再继续左右滑,焦点就被viewpag

jinmouliao2094的博客 2263

在线问题与离线问题

在线算法与离线算法的核心区别在于信息获取方式:在线算法需即时处理序列化输入且无法预知未来数据,可能导致局部最优而非全局最优解;离线算法则基于完整输入信息进行全局优化。典型例子如插入排序(在线)与选择排序(离线)。研究重点包括在线算法在不确定性环境中的实时决策能力(如加拿大旅行者问题),而离线算法依赖全量数据实现最优解。两类算法的对比揭示了信息完备性对计算效能的影响,衍生出流算法、动态算法等研究方向,为不同场景下的计算问题提供方法论支持。

人无远虑,必有近忧 1271

在线求助ing~ 急!!

翻译出问题啦!!!

m0_63305704的博客 180

php是怎么加密的,PHP怎么加密?急 在线等!!!!

function base_key_encode($txt,$key){$txt=base64_encode($txt);//先将txt进行base64编码转换$tmp="";//用来存贮通过key加密后的值for($i=0;$i$z=$txt[$i];//echo "z=".$z."$i";for($j=0;$j// echo "key[j]=".$key[$j]."";// echo "z="...

weixin_35435768的博客 139
上一篇: Flutter ListView封装,下拉刷新、上拉加载更多
damengzai
博客等级 码龄16年 16粉丝 28原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值