作者回复: 哈,这是个夸张的语法,形容provider的强大:)实际上StatefulWidget的用途不仅是通过数据变更驱动UI更新,还涉及到状态流转的各个生命周期,这些provider是搞不定的。技术领域没有银弹,还是得看具体场景
作者回复: 需要释放封装对象资源的时候,比如在用文件做持久化的场景。
作者回复: 赞
作者回复: 确实不优雅
作者回复: 以单例模式共享数据,本质上和全局变量共享数据类似,全局可见,读写效率高,适合代码量少、功能也少、相对比较简单的程序。
对于代码量大、功能又多、逻辑又复杂的工程来说,就不建议用单例/全局变量了。主要有以下几个原因:
1.代码对单例产生耦合依赖,破坏了代码的封装性/独立性
2.变量的读写处于无序状态,每个模块都可以去读写数据,对系统维护及调试非常不利
3.变量常驻内存,无法释放
作者回复: 包一个大对象就可以了
作者回复: 你检查下组件的生命周期看看是不是有销毁/新建
作者回复: 你的第一行代码有主动获取build上下文:final _counter = Provider.of<CounterModel>(context);
作者回复: 参考38节的分享哈
作者回复: 可以分模块分文件声明啊
作者回复: 可以,赞👍
作者回复: 涉及到复杂的状态共享情况,无论是单页面还是跨页面,都推荐使用Provider
作者回复: 这样可以,也可以通过封装一个大对象解决
作者回复: Provider目前还没有内置持久化的选项,不过这也不难,只要为Provider中的model提供序列化和反序列化JSON的方法,直接写到文件即可。
作者回复: 是啊,所以这就是今天的问题呀
作者回复: 试试Tabbar的preferredSize属性
作者回复: Provider主要是用来做数据读写共享;event_bus主要是用来做数据状态通知