我正在開發一個練習應用程式。我正在使用 FIREBASE 和 StreamBuilder 來檢索我的應用程式中收藏的“運動 ID”。這作業正常,我得到了正確的 ID。然后我將它傳遞給一個簡單的方法來檢索實際的“練習”,以便我可以顯示它。此方法通過一個練習串列,檢查是否找到了練習 id,然后我希望它回傳練習。但是我總是得到 null 回傳。我想不通這是為什么。
我真的很感激一些幫助,因為現在非常堅持。
下面是我的代碼:
這是方法:
Exercise getExerciseByID(String exerciseId) {
_exercises.forEach((exercise) {
print('COMPARE1: ${exercise.id} AND $exerciseId');
if (exercise.id == exerciseId) {
print('COMPARE2: ${exercise.id} AND ${exerciseId}');
return exercise;
}
});
}
請注意,這兩個列印陳述句都列印并顯示匹配的 id
這是使用 StreamBuilder 等構建的。
return Scaffold(
body: StreamBuilder(
stream: FirebaseFirestore.instance
.collection('favorites')
.doc('${_firebaseAuth.currentUser.uid}')
.collection('userFavorites')
.snapshots(),
builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
if (!snapshot.hasData)
return Center(
child: CircularProgressIndicator(),
);
return ListView.builder(
itemCount: snapshot.data.docs.length,
itemBuilder: (context, index) {
//TODO: GET EXERCISE FOR DOC
String _exerciseId = snapshot.data.docs[index].id;
_exercise = getExerciseByID(_exerciseId);
//TODO: DISPLAY CARD
print("Retrieved Exercise: $_exercise");
return Center(child: Text(""));
},
);
},
// padding: EdgeInsets.only(left: sideMargin),
// },
),
);
注意:列印陳述句:print("Retrieved Exercise: $_exercise"); 是我總是找到 NULL 的地方。
非常感謝您的幫助。
uj5u.com熱心網友回復:
改變這個
Exercise getExerciseByID(String exerciseId) {
_exercises.forEach((exercise) {
print('COMPARE1: ${exercise.id} AND $exerciseId');
if (exercise.id == exerciseId) {
print('COMPARE2: ${exercise.id} AND ${exerciseId}');
return exercise;
}
});
}
對此
Exercise getExerciseByID(String exerciseId) {
Exercise returningExercise;
_exercises.forEach((exercise) {
print('COMPARE1: ${exercise.id} AND $exerciseId');
if (exercise.id == exerciseId) {
print('COMPARE2: ${exercise.id} AND ${exerciseId}');
returningExercise = exercise;
}
});
return returningExercise;
}
您將在 ForEach 陳述句中回傳。這不會回傳到您的功能。將 return 陳述句放在 ForEach 陳述句之外。
注意:此解決方案不是最好的。但你現在知道出了什么問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/345334.html
