[英]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.