BlocProvider.value 如何与添加的事件一起使用
Posted
技术标签:
【中文标题】BlocProvider.value 如何与添加的事件一起使用【英文标题】:How does BlocProvider.value works with added Event 【发布时间】:2021-07-31 20:27:34 【问题描述】:如果将一个事件添加到 BlocProvider.value 中正在传递的块中会发生什么?
会在我进入页面之前还是之后添加事件?
Blocprovider.value 是避免在 initState() 方法中向 bloc 添加事件的理想方法吗? 我正在尝试避免 initstate,因为我正在收听来自 firebase 的数据流(此事件只需调用一次)。
【问题讨论】:
每次构建都会调用 BlocProvider.value 中的 add-method。这不是最佳方式。此添加事件将在当前构建之后添加。 处理此问题的最佳和最佳方法是什么? @Mäddin 我可能会在 didChangeDependencies 中进行此初始化。但我不知道这是否是最佳做法。 【参考方案1】:我找到了解决方法, 使用上述方法将使 LoadProductFromStream 事件在进入/打开 StreamproductPage() 之前就被调用。
为了避免这种情况,可以改用简单有效的方法
-
创建包装小部件
创建正文(显示结果的主要小部件)
下面附上一张图片来说明这一点
包装小部件是创建/初始化块的地方 以及 LoadProductFromStream() 事件将添加到 bloc 的位置
总结
这样我们只在到达 StreamproductPage
时将 LoadFromStream() 事件添加到 bloc外卖
BlocProvider(create:(context)=> xyzBloc()) //可以自动关闭bloc
同时 BlocProvider.value() // 不会自动关闭 bloc (我会被纠正)
【讨论】:
以上是关于BlocProvider.value 如何与添加的事件一起使用的主要内容,如果未能解决你的问题,请参考以下文章
Flutter Bloc:在创建的上下文中没有我的 bloc 的祖先,而我很好地为其提供了 BlocProvider.value