【问题标题】:How to update future of future builder如何更新未来建设者的未来
【发布时间】:2021-01-15 21:46:06
【问题描述】:

假设我有一个 FutureBuilder,它的未来是 getBusinessListByRating(),它调用 API 以获取按 Rating 排序的 BusinessList。然后我按下一个按钮按字母顺序对列表进行排序。当我这样做时,我希望未来是 getBusinessListByAlpha() 并重新渲染。

我怎样才能做到这一点?

我尝试使用 setState 来更新未来,但它不起作用。

【问题讨论】:

  • 感谢您加入社区。为了能得到更多帮助,能否提供代码示例?

标签: flutter dart


【解决方案1】:

在您的状态类中,您应该像这样初始化未来:

Future getBusinessListFuture;

@override
void initState() {
  super.initState();
  getBusinessListFuture = getBusinessListByRating(rating);
}

在你的 FutureBuilder 中:

FutureBuilder(
   future: getBusinessListFuture,
   builder: ....
)

点击按钮更新未来:

onTap: () {
  setState(() {
     getBusinessListFuture = getBusinessListByRating(alphabetical);
  });
}

这应该会更新未来并重建小部件。

【讨论】:

    【解决方案2】:

    如果有一个方法接受一个参数,然后改变参数。然后让该函数调用您特定的辅助方法。

    类似:

    enum BusinessListOrdering {
      rating,
      alpha,
      score
    }
    
    getBusinessListBy(BusinessListOrdering order) {
      switch (order) {
        case BusinessListOrdering.rating:
          return getBusinessListByRating();
        case BusinessListOrdering.alpha:
          return getBusinessListByAlpha();
        case BusinessListOrdering.score:    
          return getBusinessListByScore();
      default:
          return getBusinessListByRating();
      }
    }
    

    因此,当您按下按钮时,您可以在小部件中设置枚举变量的状态。

    onPressed: () {
      setState(() {
        order = BusinessListOrdering.alpha;
      });
    },
    

    FutureBuilder 改为调用:

    getBusinessListBy(order)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-15
      • 1970-01-01
      • 1970-01-01
      • 2019-11-22
      • 2020-03-28
      • 2021-01-03
      • 2020-10-27
      相关资源
      最近更新 更多