早速結論ですが、Future.forEach
を使います。
// 例: idでItemオブジェクトを取得してリストに格納する。
Future loadItems() async {
List<Item> items = [];
await Future.forEach(_ids, (id) async {
// findByIdメソッドで、DBまたはWebAPIからitemオブジェクトを取得する。
Item item = await _itemRepository.findById(id);
items.add(item);
});
...
}
最初は以下のように実装していたので、forEachの処理が終わる前に次の処理が呼ばれてました...。
// Bad!!
Future loadItems() async {
List<Item> items = [];
_ids.forEach((id) async {
Item item = await _itemRepository.findById(id);
items.add(item);
});
...
}