🎉

【Flutter】forEachと.mapでawaitさせる

2023/02/15に公開

初めに

すごくただのメモです。

forEachでawait

[通常]

 dataList.forEach((data) {
   //処理
 });

[await]

 await Future.forEach(dataList,(data) {
   //処理
 });

.mapでawait

.map内で、取得したデータを引数にして別の関数を実行し、その返り値を利用する。
[通常]

dataList = docs.map((doc) => dataListModel(
  a: doc['a'],
  b: doc['b'],
  c: doc['c'],
)).toList();

[await]

dataList = await Future.wait(docs.map((doc) async {
  final fetchedData = await function(doc['b']); //待たせたい処理
  return dataListModel(
    a: doc['a'],
    b: fetchedData,
    c: doc['c'],
  );
}).toList());

awaitが機能しているか確認

await Future.delayed(Duration(seconds: 5));

参考

https://zenn.dev/yass97/articles/d98348f2915caf
https://zenn.dev/ttskch/articles/4cee05c400b4d8

余談

記述した二つを利用して、クライアント側でFireStoreのデータをjoinしましたが、
そもそもfirestoreはNoSQLなのでjoinするような仕組みにすべきではない。(自戒)
https://qiita.com/mogmet/items/921fe9ba62a4d2442e32

Discussion