【问题标题】:flutter bloc streambuilder with refreshindicator rebuild twiceflutter bloc streambuilder with refreshindicator 重建两次
【发布时间】:2019-12-26 08:43:25
【问题描述】:
Widget build(BuildContext context) {
final blocData = WeatherBlocProvider.of(context).bloc;
    if (WeatherBloc.permission == true) {
      blocData.forceRefreshAll();
      return Container(
        child: StreamBuilder(
            stream: blocData.zipAll,
            builder: (scontext, snapshot){
                //to do
               }

现在我正在使用带有 streambuilder 的 bloc 模式 当我刷新父小部件时,我可以看到blocData.forceRefreshAll() 这行被请求了两次。(我的意思是构建方法被请求了两次)我怎样才能只做一个? 我看到了unwanted rebuild subject,他们说使用实例或 initstate 但使用 bloc 模式我认为使用 initstate 是不可能的,并且 const value 不适用 blocData.forceRefreshAll()

【问题讨论】:

    标签: flutter


    【解决方案1】:

    build 方法是用来构建小部件树的,它可以由于各种原因被多次调用。这就是为什么不应该在build 中获取数据的原因。
    如果您无法访问 initState 中的 bloc,因为还没有 context - 覆盖另一个方法 didChangeDependencies。它在initState之后被调用,它可以使用context,所以你可以用它访问bloc provider。

    【讨论】:

    • 感谢您的快速回答,但是当我刷新 didchagedependencies 时也会调用两次
    • 是的,它也可以被多次调用,所以如果你想确保你的方法被调用一次你可以创建一些标志(例如bool isDataRequested)并且只有在没有设置标志的情况下才获取数据
    • 谢谢,我想我解决了这个问题,请问为什么 refreshindicator 工作两次?
    • 很难说只有一小部分代码,所以答案将是抽象的。发生这种情况是因为小部件树和框架中的某些更改决定重建它。 StreamBuilder 也可能导致这种行为,第一次它在没有数据的情况下触发,然后它从流中捕获数据
    猜你喜欢
    • 2021-10-12
    • 2020-07-21
    • 2019-09-04
    • 2023-03-24
    • 2021-06-16
    • 2019-12-31
    • 2020-06-17
    • 2020-07-30
    • 2019-12-25
    相关资源
    最近更新 更多