美文网首页Flutter&Dart
哥哥教你最简单的Flutter状态管理三步走

哥哥教你最简单的Flutter状态管理三步走

作者: 哥哥是欧巴Vitory | 来源:发表于2019-08-26 15:44 被阅读0次

    什么是状态管理?

    状态管理的目的就是为了让界面与业务分离。界面根据状态来显示,有操作时发出Action或者Event,而不处理实际 的业务,业务交给上层处理。bloc在界面中有操作发生时使用dispatch发出Event事件,fish-redux也是类似使用dispatch,只不过发出的叫Action动作而已。当dispatch发出事件时mapEventToState即可收到事件,此时将event根据业务转换为状态,状态会传递回给界面进行显示。bloc模块其实就是类似mvvm中的ViewModel,负责所有业务的处理。

    换句话说,在flutter中,Statelesswidget都是没有状态的,没有提供刷新方法,但是如果全用statefulwidget的话又感觉很烦,每次刷新都要先判断一下是否更改过然后再调用一次setstate()方法,有时候想刷新一小块数据,这个时候就要用到状态管理来改变这些数据。

    接下来哥哥带你一步一步走:

    第一步:状态管理,你要管理的是什么,要做什么操作?

    回答:我要我操作的数据++,实现一个计数器。

    第二步,你要改变哪里的数据,你要在哪里操作?

    回答:我想在全局的任何地方都可以改变那个数据,那么我最好把状态管理的providers放到应用顶层。

    这里我要讲一下Google出品的两款Provider和Provide的区别,注意,他们只差一个r。

    provider是最近才出现的比较新的,目前版本provider: ^3.0.0+1。而provide停留在provide: ^1.0.2。

    使用Provide的话顶层处理要如上图……

    没错,如果使用provider就不用这样了,而是如下:

    Provide在具体方法中的使用:

    Provide.value(context).increment(调用一下里面的方法。这里也可以传参数进去只需要在Counter里面的increment里面写两个接受参数的就好);

    Provider这样写:

    Provider.of(context,listen:false).increment(这里也可以传参数);

    再来个实际的例子:

    但是有时候我们需要的是一个data之类的,比较多的值。那我们可以这样做:

    provide中:

    provider中:

    重要提示:在使用 provider的时候我们要注意了一定要设置listen的Bool值就是这样.

    awaitProvider.of(context,listen:false).getGoodsInfo(goodsId);

    附上Github地址:https://github.com/ryanranya/flutter_BXSH

    第三步:建造Provide,调用Provide

    看了那么多状态管理的,个人感觉Provider还是属于简单易用的,并且是google推荐的。官方推荐最致命!

    相关文章

      网友评论

        本文标题:哥哥教你最简单的Flutter状态管理三步走

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