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统一存储)

状态状态为只读(数据不能直接修改