什么是状态

因为对于Flutter,它使用的是 声明式的编程思维 (https://flutter.cn/docs/development/data-and-backend/state-mgmt/declarative) ,这点和Android 非常不一样
同时也意味着Flutter是通过更新UI来反映当前app的状态:
image.png
简单来说,在Flutter中,如果我们想更新我们的控件,最基本的方式应该是setState()了。如果说我们一个页面里的组件不多,直接使用setState()并没有什么问题,但是实际工作中,我们的页面布局还是足够复杂的。

为什么需要状态管理?

因为Flutter的状态传递是一种自上而下的过程,但是反过来不行. 所以在跨组件获取,或者回调状态的时候非常麻烦.

因为项目一复杂
image.png
如果我们把所有的Widget都写到一个类里,这个类一定会是个200多斤的胖子,而且很容易陷入{{{{}}}}旋涡。这时我们会想到Widget进行拆分,但这个时候如果仅仅依靠setState(),你会发现这将十分痛苦,因为setState()的作用域仅限于当作Widget,也就是说如果你仅仅在最底层的Widget里调用setState并不会更新顶层的Widget,这就意味你要通过回调实现,而且在这个过程中你会发现一些Widget类里的变量又必须是不可变的,这又会引起其他的麻烦事

Flutter有什么样的状态管理方式

Flutter状态管理 - 初探与总结https://juejin.im/post/5cd91bb0f265da034e7eaca3
可以先看上面这个.
那么选什么的 Provider 为什么呢,官方推荐
什么是Provider
Provider其实是对InheritedWidget的封装。
有什么类型的 Provider
image.png

额外:Flutter 的数据传递的方式

我们在Flutter 中主要使用 布局嵌套的方式,所以 传递数据的时候 ,需要使用构造函数一层一层传下来,
下面就是我们主要使用的几个方法.

1.构造方法属性传递
缺点,传递路径很长,而且写进构造函数. 到后面不够用了 ,增加数据会很麻烦
2. InheritedWidget
这个就是对于上一个的改进 ,简单来说就是可以 跨过中间几个weight传递.
可以看下下面这个视频 https://www.youtube.com/watch?v=1t-8rBCGBYw
3.Notification
Notification中文意思是通知,与Android中的广播机制类似,在Flutter中Notification的功能是子节点状态变更,发送通知上报
Notification的数据变更是通过Widgte树向上冒泡的,我们往往在下层Wdiget发送通知然后在上层处理通知。

4.EventBus(推荐)

数据传递和状态管理有什么区别的呢. 更新!**

资料:

Flutter状态管理:Provider4 入门教程(一)https://juejin.im/post/5ed3af0f6fb9a047f2298c71
Flutter | 状态管理指南篇——Providerhttps://juejin.im/post/5d00a84fe51d455a2f22023f
简单的应用状态管理https://flutter.cn/docs/development/data-and-backend/state-mgmt/simple
跨组件状态共享(Provider)https://book.flutterchina.club/chapter7/provider.html

Flutter数据(事件)传递https://zhuanlan.zhihu.com/p/145993931
Flutter状态管理 - 初探与总结https://juejin.im/post/5cd91bb0f265da034e7eaca3