我在我的应用中使用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的原因吗?
答案 0 :(得分:1)
如果新子树中的键和小部件相等,则似乎是元素被重用。通过为PageView分配新的键,我设法“强制”重新创建了子树。
答案 1 :(得分:0)
要在项目中包括BLoC,有两种用法。
您需要在它们的小部件的初始化中创建一个实例,然后直接在父级中使用它,并将其传递给子组件的build方法。
如果尚未找到答案,请在回复中添加更多详细信息!