重新加载窗口小部件树时未重新创建flutter BlocProvider

时间:2020-10-04 20:10:00

标签: flutter bloc

我在我的应用中使用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的原因吗?

2 个答案:

答案 0 :(得分:1)

如果新子树中的键和小部件相等,则似乎是元素被重用。通过为PageView分配新的键,我设法“强制”重新创建了子树。

答案 1 :(得分:0)

要在项目中包括BLoC,有两种用法。

  • 首先,您只有一个包含多个事件的组件
  • 第二个您拥有一个小部件树,并且您想在两者之间传递您的集团

您需要在它们的小部件的初始化中创建一个实例,然后直接在父级中使用它,并将其传递给子组件的build方法。

如果尚未找到答案,请在回复中添加更多详细信息!