flutter - Flutter:嵌套异步 HTTP 调用的最佳实践
问题描述
我正在尝试将两个 Http 请求的结果加载到一个列表项中(第二个请求是关于第一个请求结果项的获取详细信息)。第一个请求获取加密货币列表。第二个请求收集有关该货币的更多信息。
我想在两个单独的请求中完成此操作的原因是,
- 数据来自不同的来源。
- 获得货币列表后,我想显示一个流程圈,意思是“保持冷静,正在加载详细信息”
我已经尝试过的是;
一个有两种方法(都调用 setState)的有状态小部件是灾难性的。无尽的循环。
构建方法中的一个基本状态小部件和第二个子状态小部件。有效,但每当我向上或向下滚动时,列表都会重新呈现其项目,并且子 stateful-widget 会一次又一次地发出相同的 getPrice HTTP 请求。
一个继承小部件和一个无状态小部件。必须为这两种 HTTP 请求方法使用上下文。它再次引起了无限循环。
目前,我大脑的一部分大喊“Redux 是正确处理这个问题的唯一方法”
你对如何处理这个有什么建议吗?先感谢您。
解决方案
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 感到不舒服。每次从服务器获取详细信息时,我都会重新渲染整个列表。它应该是怎样的?
推荐阅读
- css - 如何在生产中获取字体文件
- r - 使 ShinyApp 的一部分变灰
- javascript - 世博会反应本机背景fecth setTimeout是否可能?
- r - 用 NA 替换所有部分字符串条目
- python - Altair - 添加颜色时出现条形图域裁剪错误
- python - 使用 python 将 Firebase 用户数据导出为 Json 文件格式
- r - R中带有异常值的地图
- teamcity - 在 TeamCity 中使用 xUnit 框架重新运行 C# 失败的测试
- amazon-web-services - Aws lex v2 - 检测到和错过的话语视图丢失
- flutter - 消息框不根据消息长度展开