我正在制作一個購物應用程式。在產品中,我給出了一些從 api 接收的不同型別產品的標簽。我想添加另一個“全部”選項卡,它將所有其他選項卡中的所有產品一起顯示。所有 API 都使用每個選項卡標題的 id 呼叫,并且結構相同。在網上我可以找到一些關于future.wait的答案,但我認為它不會在這種情況下起作用,因為他們談論完成一項又一項任務,這是我想要的,但我也想結合結果。基本上,如何將所有這些相同的期貨組合成一個單一的未來以傳遞給 futurebuilder 或者是否有解決這個問題的方法?
編輯:我得到這樣的期貨清單:-
for (int i = 0;i <Length;i ) {
ProductsList.add(CollectionProductServices().getCategories(collectionModel.childPackages[i].id.toString()));
}
uj5u.com熱心網友回復:
您的解決方案是使用 Future.wait :
FutureBuilder(
future: Future.wait([
firstFuture(), // Future<List<product>>
secondFuture(),// Future<List<product>>
//... More futures
]),
builder: (
context,
// results of all futures above
AsyncSnapshot<List<List<product>>> snapshot,
){
// Check hasData once for all futures.
if (!snapshot.hasData) {
return CircularProgressIndicator();
}
// Merge lists into one list
final List<product> result = [...snapshot.data[0], ...snapshot.data[1]];
return Container();
}
);
uj5u.com熱心網友回復:
你可以簡單地使用 wait和expand
final ress = await Future.wait([
for (int i = 0;i <Length;i )
CollectionProductServices().getCategories(collectionModel.childPackages[i].id.toString());
]);
final allProduct = ress.expand((element) => element).toList();
你可以使用mapinsted of forlike
final categoriesFuture = Future.wait<List>(
collectionModel.childPackages.map((item)=> CollectionProductServices().getCategories(item.id.toString()) );
);
但我不認為這是一個很好的解決方案,因為我們將每個類別獲取兩次,一個用于它的選項卡,另一個用于所有類別選項卡
你應該只得到一次并結合相同的結果,比如
然后使用 categoriesFuture,allProduct 進行展示
// inside initState or class
final List<Future> categoriesFuture =
collectionModel.childPackages.map((item)=> CollectionProductServices().getCategories(item.id.toString()) );
final allProduct = Future.wait(categoriesFuture).then((value) => value.expand((element) => element).toList()) ;
//inside build method:
Column(
children: [
for (var item in categoriesFuture)
FutureBuilder(future: item,)
]);
FutureBuilder(future: allProduct,)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/464483.html
上一篇:顫動下拉按鈕選擇問題
