🌻

FlutterのforEachで「async/await」を使う

1 min read

早速結論ですが、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);
  });
  
  ...
}