2019 Google I/O 大会,官方在 Pragmatic State Management in Flutter (Google I/O'19) 主题演讲上正式介绍了 由社区作者 Remi Rousselet 与 Flutter Team 共同编写的 Provider 代替 Provide 成为官方推荐的状态管理方式之一。 flutter.dev/docs/develo…
InheritedWidgets, but simple
book.flutterchina.club/chapter7/in…
为什么要进行状态管理
ChangeNotifier
ChangeNotifier,这个类能够帮我们自动管理所有听众。当调用 notifyListeners() 时,它会通知所有听众进行刷新
实际上是调用的setstate方法
Provider
通过 Provider.value 能够管理一个恒定的数据,并提供给子孙节点使用。我们只需要将数据在其 value 属性中声明即可。 而 ChangeNotifierProvider.value 不仅能够提供数据供子孙节点使用,还可以在数据改变的时候通知所有听众刷新。(通过之前我们说过的 notifyListeners)
MultiProvider
The list of providers that will be transformed into a tree from top to bottom. ///
Example: with [A, B, C] and [child], the resulting widget tree looks like:
A
|
B
|
C
|
child
XProvider
Provider
最基本得 provider. 携带一个 value 并暴露它.
ListenableProvider
Listenable 对象的特定 Provider 。ListenableProvider将监听对象,以便在调用侦听器时重建依赖它的 Widgets。
ChangeNotifierProvider
一个具体的 ListenableProvider 监听 ChangeNotifier 。它会在需要时自动调用ChangeNotifier.dispose。
ValueListenableProvider
监听 ValueListenable 并仅暴露 ValueListenable.value。
StreamProvider
监听 Stream 并暴露最新发出的值。
FutureProvider
携带一个 Future,并在 Future 完成时更新依赖
Provider.of(context)
Obtains the nearest [Provider] up its widget tree and returns its
value.
If [listen] is true (default), later value changes will trigger a new
[State.build] to widgets, and [State.didChangeDependencies] for
[StatefulWidget].
static T of(BuildContext context, {bool listen = true})
Consumer
Consumer 能够在复杂项目中,极大地缩小你的控件刷新范围。Provider.of(context) 将会把调用了该方法的 context 作为听众,并在 notifyListeners 的时候通知其刷新。