Flutter

理解与选择Flutter状态管理方案

2021-01-30  本文已影响0人  青叶小小

一、前言

谈到Flutter,一定绕不开其状态管理这个热门话题。
Flutter是一个声明式框架,我们可能只需要将数据映射为视图显示出来就行,而状态管理可能并不需要。

widgets.png

但是随着业务的增加,功能也会急剧增加,应用的状态会呈爆炸式增长,此时应用可能是这样:

complex.png

一个最实际的场景:列表页和详情页都有“点赞”功能,如果详情页“点赞”,则返回至列表页时,就需要同步“点赞”状态。

1.1、目前在状态管理方面有五种方案:

其中,ScopedModel与Provider类似;

1.2、这五种方案都有如下特点:

二、局部状态与全局状态

以登录页为例,用户可以输入用户名和密码,点击登录按钮,将用户名与密码提交至后台;如果成功,则返回用户的id;登录页只关心用户名和密码的数据,其它页面并不关心用户名和密码,所以,用户名和密码只作用于登录页,因此是局部状态;成功后返回的用户id,再后续其它页面与后台的交互中都需要用到,因此,用户id作用于全局,它是全局状态;

作用域 setState ScopedModel Provider BLoC Redux
局部状态 \color{blue}{支持} \color{blue}{支持} \color{blue}{支持} \color{blue}{支持} \color{red}{不支持}
全局状态 \color{red}{不支持} \color{blue}{支持} \color{blue}{支持} \color{blue}{支持} \color{blue}{支持}

2.1、setState

展示逻辑和业务逻辑在同一个类里,打破了干净和高质量代码的原则。以后应用的规模扩张的时候,代码的维护将会是一个挑战。

2.2、ScopedModel

详细请查看《Flutter状态管理(一):ScopedModel

2.2、Provider

详细请查看《Flutter状态管理(二):Provider

2.3、BLoC(Business Logic Component)

详细请查看《Flutter状态管理(三):BLoC(Business Logic Component)

2.4、RxDart

详细请查看《Flutter状态管理(四):ReactiveX之RxDart

2.5、Redux

详细请查看《Flutter状态管理(五):Redux

上一篇下一篇

猜你喜欢

热点阅读