繁体   English   中英

重新加载小部件树时未重新创建颤动 BlocProvider

[英]flutter BlocProvider not recreated when widget tree is reloaded

我在我的应用程序中使用 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 被调用。

任何人都可以解释为什么会发生这种情况吗? 旧小部件树是否只是简单地重用,这就是为什么 BlocProvider.create 永远不会被 BlocProviderB 调用的原因?

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

您希望如何在项目中包含 BLoC 有两种用法。

  • 首先你有一个包含多个事件的组件
  • 其次,你有一个小部件树,你想在两者之间传递你的集团

您需要在小部件的 init 中为它们创建一个实例,并直接在父组件中使用它,并在子组件的 build 方法中传递它。

如果您还没有找到答案,请在回复中添加更多详细信息!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM