如何解决重新加载窗口小部件树时未重新创建flutter BlocProvider
我在我的应用中使用Flutter Bloc(https://bloclibrary.dev),但是在重新加载小部件树时无法重新初始化bloc提供程序。
我的应用程序中树形结构的简化版本如下
[BlocProviderA]
-> [BlocBuilderA]
-> [PageView] // this shouldn't really matter but showing it here anyway in case it does :)
-> [BlocProviderB]
-> [BlocBuilderB]
在某些条件下,BlocA的状态将改变,因此BlocBuilderA将重建并返回一个新的子级(PageView),该子级具有相同的树结构,但具有一些新数据。但是,当窗口小部件树替换为BlocBuilderA时,永远不会重新创建BlocProviderB(永远不会调用BlocProvider.create)。虽然BlocBuilderB被调用。
有人能阐明为什么会这样吗?是仅重用了旧的小部件树,这就是为什么BlocProviderB永远不会调用BlocProvider.create的原因吗?
解决方法
如果新子树中的键和小部件相等,则似乎是元素被重用。通过为PageView分配新的键,我设法“强制”重新创建了子树。
,要在项目中包括BLoC,有两种用法。
- 首先,您只有一个包含多个事件的组件
- 第二个您拥有一个小部件树,并且您想在两者之间传递您的集团
您需要在它们的小部件的初始化中创建一个实例,然后直接在父级中使用它,并将其传递给子组件的build方法。
如果尚未找到答案,请在回复中添加更多详细信息!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。