我正在呼叫一個 api,它將回傳一個專案串列(鍛煉),專案將顯示在 ListView 中。但我還需要為 ListView 的每個專案呼叫另一個 api 以獲取該鍛煉的分數(如果已經有分數)并根據他們的 ID 顯示每個鍛煉的分數。我該如何解決這種情況。?我正在使用 bloc,這就是我獲取鍛煉的方式
Future<void> _onLoadingWod(
onl oadingWodEvent event, Emitter<WhiteboardState> emit) async {
emit(state.copyWith(isWodLoading: true));
final listWods =
await WhiteboardService().getListWod(state.selectedDay.toString());
emit(state.copyWith(
isWodLoading: false, listWods: listWods));
}
有些鍛煉可能還沒有分數,在這種情況下,我會在串列視圖中顯示一個按鈕來記錄每次鍛煉的分數。
我試過這樣的事情:
final listResults = await Stream.fromIterable(listWods)
.asyncMap((wod) => WhiteboardService().getresult(wod.id))
.toList();
但由于某些鍛煉可能沒有結果,因此顯示錯誤。
如何將鍛煉與結果聯系起來并在串列視圖中顯示?請提供任何幫助或指南。
uj5u.com熱心網友回復:
據我了解,它可以從一個回圈中完成。您必須為包含鍛煉 ID 的結果創建模型類。然后您可以回圈瀏覽它并從鍛煉串列中找到相關的鍛煉,然后為其分配結果。
有一個例子希望它會有所幫助。
*虛擬模型類
class Workouts {
final int id;
Result? result;
Workouts({
required this.id,
this.result,
});
}
class Result {
final int workoutId;
final String result;
Result({
required this.workoutId,
required this.result,
});
}
*將結果分配給鍛煉串列
void asignResults() {
///for each [results]
for (Result result in listResults) {
listWorkouts
.firstWhere((workout) => workout.id == result.workoutId)
.result = result;
}
listWorkouts.forEach((element) {
print(element.toString());
});
}
我認為如果您可以從后端執行此操作,它將比這種方法更有效。(例如:- 在 sql 中加入查詢)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/482579.html
