Flutter Advanced必须学习App状态管理
ui设计
UI设计
浏览:1337 次

学习材料推荐
投掷:
前言
Flutter的很多灵感来自React。它的设计思想是将数据从视图中分离出来,并通过数据映射来呈现视图。所以在Flutter中,它的小部件是不可变的,
它的动态部分都处于状态。因此,国家管理自然成为我们密切关注的对象
为什么需要状态管理
当我们第一次构建App时,它可能非常简单。我们有一些状态,可以直接映射到视图。这个简单的App可能不需要状态管理。
flatter_状态_1.png
但随着功能的增加,您的App将有几十个甚至数百个状态。此时您的App应该是这样的
flatter_status_2.png
哇,这是什么鬼东西。我们很难清楚地测试和保持我们的状态,因为这看起来太复杂了!也将有多个页面共享相同的状态,
例如,当您输入要点赞的文章并退出外部缩略图显示时,外部用户还需要显示点赞数。此时,两种状态需要同步。
此时,我们迫切需要一个架构来帮助我们澄清这些关系,国家管理框架应运而生。
国家管理框架概述
Flutter的状态管理框架目前了解以下内容
雷杜克斯
范围模型
Scoped_Model是一个dart的第三方库,它提供了一个函数,允许您轻松地将数据模型从父控件传输到其子控件。此外,在更新模型时,它会重新渲染使用该模型的所有子对象。

它直接来自于谷歌正在开发的新系统Fuchsia核心部件中Model类的简单提取,并作为独立Flutter插件发布,供独立使用。
实施原则
范围_模型.png
Scoped模型使用观察者模式,并将数据模型放置在父模型中。子体通过查找父模型来渲染数据。最后,当数据更改时,返回数据,父级通知使用模型的所有子级更新状态。
我们需要将它们放在顶级门户网站MaterialApp上,以便我们能够进行全球状态管理。
BLoC(业务逻辑组件)
BLoC是一种使用反应式编程方法构建App的方法,这是一个由流组成的完全异步的世界。
块.png
*使用StreamBuilder包装有状态部分。Streambuilder将侦听流
*此流来自BLoC
*有状态小部件中的数据来自受监控的流。
*检测用户交互手势并生成事件。例如,按下按钮。
*调用博客的功能来处理此事件
*在博客中处理后,最新数据将被添加到流接收器中
*StreamBuilder侦听新数据,生成新快照,然后再次调用构建方法
*重新构建小部件
*BLOC允许我们完美地分离业务逻辑!不再需要考虑何时需要刷新屏幕,一切都留给StreamBuilder和BLOC!告别Stateful Widget!!
*BLOC代表了业务逻辑组件,该组件由谷歌的两位工程师Paolo Soares和Cong Hui设计,并在2018年DartConf(2018年1月23日至24日)期间首次展示。单击观看YouTube视频。。

提供
与模型一样,Provide也使用InheritWidget将共享状态置于顶层MaterialApp上。底层部分通过Prover获得状态,并通过混合ChangeNotifier通知依赖于状态的组件刷新。
提供商还提供提供商。流,它使我们能够以处理流的方式处理数据
1.重复
如果你曾经做过反应式开发,也许你会想到Redux。Flutter是否有类似于Redux的状态管理库?答案是肯定的。
什么是redux
Redux是一种单向数据流架构,可以轻松地开发、维护和测试App
redux_流量wps.png
存储:这是一个存储数据的地方。你可以把它看作一个容器。整个App只能有一个存储。
状态:Store对象包含所有数据。如果要在某个时间点获取数据,需要生成存储的快照。此时间点数据集称为状态
操作:是一个对象。type属性是必需的,表示Action的名称。其他属性可以自由设置
纯函数是函数编程的概念,必须遵守以下约束。
不覆盖参数
无法调用系统I/O的API
不能调用诸如Date之类的不纯方法。now()或数学。random(),因为每次都会得到不同的结果
Redux的三个原则
单一数据源(App统一存储)
状态状态为只读(数据不能直接修改