【问题标题】:Flutter: Best practice for nested async HTTP callsFlutter:嵌套异步 HTTP 调用的最佳实践
【发布时间】:2018-07-09 12:50:57
【问题描述】:

我正在尝试将两个 Http 请求的结果加载到一个列表项中(第二个请求是关于第一个请求结果项的获取详细信息)。 第一个请求获取加密货币列表。 第二个请求收集有关该货币的更多信息。

我想在两个单独的请求中完成这个的原因是,

  1. 数据来自不同的来源。
  2. 获得货币列表后,我想显示一个流程圈,意思是“保持冷静,正在加载详细信息”

我已经尝试过的是;

  • 一个有状态的小部件有两种方法(都调用 setState),这是灾难性的。无限循环。

  • 构建方法中有一个基本的 stateful-widget 和第二个子 stateful-widget。有效,但每当我向上或向下滚动时,列表都会重新呈现其项目,并且子 stateful-widget 会一次又一次地发出相同的 getPrice HTTP 请求。

  • 一个继承小部件和一个无状态小部件。必须为这两种 HTTP 请求方法使用上下文。又造成了死循环。

目前,我大脑的一部分在喊“Redux 是正确处理这个问题的唯一方法”

您对如何处理这个问题有什么建议吗? 提前谢谢你。

【问题讨论】:

  • 无限循环是什么意思?你很可能做错了什么。顺便说一句,拥有超过 2 年的经验,我从来不需要 redux
  • 另外,这个问题可以归类为“基于意见”。在 stackoverflow 上应该避免这种情况,因为没有有限的答案。
  • 我在 getCurrencyList 函数和 getCurrencyDetail 函数中触发了 setState。而我总是在 listView.builder 中调用 getCurrencyDetail。在设置状态之前,我将尝试在 getList 请求之后立即链接。

标签: flutter


【解决方案1】:
void getOwnedCoins() async {
CoinsList cList = await ResourceCoins().list();
setState(() {
  list = cList;
  items = cList.result.length;
});
getCoinSummary(cList);
}

void getCoinSummary(CoinsList coins) {
coins.result.forEach((Coin coin) async {
  CoinSummary cs = await ResourceCoinSummary().summary(market: {'market': 'btc-' + coin.currency});
  coin.summary = cs;

  setState(() {
    list = coins;
  });
});
}

我就是这样解决的。我的错误是在 ListView.builder 中调用 getCoinSummary。但是,我对 getCoinSummary 中的 setState 感到不舒服。每次从服务器获取详细信息时,我都会重新渲染整个列表。是不是应该这样?

【讨论】:

    猜你喜欢
    • 2021-11-15
    • 1970-01-01
    • 2018-08-14
    • 1970-01-01
    • 1970-01-01
    • 2019-01-29
    • 1970-01-01
    • 2010-10-09
    • 1970-01-01
    相关资源
    最近更新 更多