我有一个Map<int, Future<GpxCoordinates>>
,其中int
键是实体的id,future包含对API的异步调用,以获取相关实体id的数据。
我需要一起启动所有请求,然后等待它们。
这是我的不工作的实现:
try {
Map<int, Future<GpxCoordinates>> gpxsCoordinatesToFetch = {};
for (var tourId in event.toursIds) {
gpxsCoordinatesToFetch[tourId] = gpxRepository.fetchGpxCoordinates(tourId);
}
// Problem in the return await type
final gpxsCoordinates = await Future.wait(gpxsCoordinatesToFetch.values);
emit(GpxsCoordinatesLoaded(coordinates: gpxsCoordinates));
} catch (e) {
debugPrint(e.toString());
emit(GpxError());
}
问题是Future.await
返回List<GpxCoordinates>
,但我需要返回Map<int, GpxCoordinates>
。是否存在一种方法来获得所需的Map<int, GpxCoordinates>
一旦所有的请求已经完成?
3条答案
按热度按时间wvyml7n51#
您必须以某种方式将接收到的数据与ID连接起来。这是实现它的方法之一:
输出:
{1: some value, 2: some value}
另一个(可能更好):
nlejzf6q2#
更换
与
**编辑:**您可以通过使用第三方库或创建一个函数来完成此操作。
上面的例子可以重写为
辅助函数。
wbrvyc0a3#
您可以使用:
它看起来可能有点混乱,但是,我们只是将**
<int, Future<GpxCoordinates>>
的每个条目Map到一个返回Future<int, GpxCoordinates>
**的函数并调用该函数。然后将
List<Map<int, GpxCoordinates>>
更改为Map<int, GpxCoordinates>