FlutterFlutter&Dart学习计划

哥哥教你Flutter重难点攻克之State和Provider理

2019-07-24  本文已影响16人  哥哥是欧巴Vitory

什么是State?

我们知道 Flutter 宇宙中万物皆Widget,而Widget是@immutable即不可变的,所以每个Widget状态都代表了一帧。

在这个基础上,StatefulWidget的State帮我们实现了在Widget的跨帧绘制,也就是在每次Widget重绘的时候,通过State重新赋予Widget需要的绘制信息。

setState做了什么?

调用了 markNeedsBuild ,markNeedsBuild 内部会标记 element为 diry,然后在下一帧 WidgetsBinding.drawFrame 才会被绘制,这可以也看出 setState 并不是立即生效的。

什么是Provider?

因为 Flutter 与 React 技术栈的相似性,所以在 Flutter 中涌现了诸如flutter_redux、flutter_dva、flutter_mobx、fish_flutter等前端式的状态管理,它们大多比较复杂,而且需要对框架概念有一定理解。

而作为 Flutter 官方推荐的状态管理scoped_model,又因为其设计较为简单,有些时候不适用于复杂的场景。

所以在经历了一端坎坷之后,今年 Google I/O 大会之后,Provider成了 Flutter 官方新推荐的状态管理方式之一。

它的特点就是:不复杂,好理解,代码量不大的情况下,可以方便组合和控制刷新颗粒度, 而原 Google 官方仓库的状态管理flutter-provide已宣告GG ,provider成了它的替代品。

关于Provider知识点?

1、Provider的内部DelegateWidget是一个StatefulWidget,所以可以更新且具有生命周期。

2、状态共享是使用了InheritedProvider这个InheritedWidget实现的。

3、巧妙利用MultiProvider和Consumer封装,实现了组合与刷新颗粒度控制。

上一篇下一篇

猜你喜欢

热点阅读