一、前言
谈到Flutter,一定绕不开其状态管理这个热门话题。
Flutter是一个声明式框架,我们可能只需要将数据映射为视图显示出来就行,而状态管理可能并不需要。
但是随着业务的增加,功能也会急剧增加,应用的状态会呈爆炸式增长,此时应用可能是这样:
complex.png一个最实际的场景:列表页和详情页都有“点赞”功能,如果详情页“点赞”,则返回至列表页时,就需要同步“点赞”状态。
1.1、目前在状态管理方面有五种方案:
- 基于StatefulWidget的setState;
- ScopedModel;
- Provider;(Google 2019 I/O大会强力推荐的)
- BLoC(Business Logic Component);
- Flutter Redux版;
其中,ScopedModel与Provider类似;
1.2、这五种方案都有如下特点:
- 稳定的开发速度,且不牺牲代码质量;
- 显示逻辑与业务逻辑分离;
- 容易理解;
- 可预期性;
二、局部状态与全局状态
以登录页为例,用户可以输入用户名和密码,点击登录按钮,将用户名与密码提交至后台;如果成功,则返回用户的id;登录页只关心用户名和密码的数据,其它页面并不关心用户名和密码,所以,用户名和密码只作用于登录页,因此是局部状态;成功后返回的用户id,再后续其它页面与后台的交互中都需要用到,因此,用户id作用于全局,它是全局状态;
作用域 | setState | ScopedModel | Provider | BLoC | Redux |
---|---|---|---|---|---|
局部状态 | |||||
全局状态 |
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》
网友评论