Closed aitsuki closed 3 years ago
Bloc和Provider都是一样,基于InheritedWidget去传递数据,但是InheritedWidget传递数据,必须是基于父子节点的关系才能传递数据,页面之间的跳转,A -> B,B页面并不是A的子节点,他们俩更像是平级的关系,所以A页面BuilderProvider的Provider,我无法在B页面通过Provider.of的方式获取(不使用特殊方法:传递provider实例,A页面跳转路由里定义B页面BuilderProvider)
所以在Provider和Bloc中,想做跨页面交互,就需要把实例放在路由的顶节点或页面顶节点,这样可以做的跨页面交互,但是有个很不好的体验,这些全局的Provider实例不会随着页面的销毁而销毁,会全局存在,在实际业务场景中会非常的麻烦(某些交互模块进入页面要初始化数据)
这篇文章前一部分,写了对InheritedWidget的一些思考:https://juejin.cn/post/6984593635681517582
这两天想迁移到GetX,从Getx项目链接过来的,看到文档的开头我有点不解:
为什么说Bloc无法做夸页面交互,文档中的
final JumpOneLogic logic = Get.put(JumpOneLogic());
和final JumpTwoLogic twoLogic = Get.put(JumpTwoLogic());
不就是等价于两个局部的BlocProvider吗,Bloc自身就使用Provider库作为依赖管理,应该是能实现文档中跨页面交互的需求,而不需要使用全局路由。当然,GetX能提供更清晰易用的依赖管理倒是真的。