美文网首页Flutter
理解与选择Flutter状态管理方案

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

作者: 青叶小小 | 来源:发表于2021-01-30 00:32 被阅读0次

    一、前言

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

    widgets.png

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

    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
    局部状态 \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

    相关文章

      网友评论

        本文标题:理解与选择Flutter状态管理方案

        本文链接:https://www.haomeiwen.com/subject/ichhtltx.html