flutter - 颤振:返回值为 NULL
问题描述
我正在开发一个练习应用程序。我正在使用带有 StreamBuilder 的 FIREBASE 来检索我的应用程序中收藏的“练习 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的地方。
非常感谢您的帮助。
解决方案
改变这个
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 语句之外。
注意:此解决方案不是最好的。但你现在知道出了什么问题。
推荐阅读
- javascript - 反应JS | 映射嵌套对象
- javascript - 显示来自 RSS 源的图像
- angular - 通用类型数组未显示属性
- android - 我想通过其高级 api 即 PJSUA2 使用 PJSIP 堆栈开发一个 android VOIP 应用程序
- linux - 我如何查看 linux 上的内存使用情况?(过去 30 天)
- c# - 获取值 <= 10 的卡片组合列表
- typescript - Intellisense 卡在使用打字稿加载
- gradle - 如何告诉 gradlew 使用现有的 gradle 而不是每次都下载它?
- google-api - 如何使用 google drive webhook 获取共享驱动器更改事件(如驱动器重命名、添加或删除成员等)?
- python - 读取JSON文件时如何修复“'list'对象没有属性'values'”