firebase - 在 null 上调用了方法“get”。颤振火力基地
问题描述
我正在尝试为我的应用程序制作排行榜功能,我需要按他们的分数对 firebase 用户列表进行排序,并且只显示最接近我的用户分数的前五名用户。每当我尝试对它们进行排序时,我都会遇到问题(分数,isLessThanOrEqualTo:用户分数)它不会正确获得分数。
这是错误消息。
The method 'get' was called on null.
Receiver: null
Tried calling: get("score")
这是我对用户数据进行排序的类。
class DatabaseService {
final String uid;
DatabaseService({this.uid});
DocumentSnapshot snapshot;
// Collection reference
final CollectionReference<Map<String, dynamic>> highscoresCollection =
FirebaseFirestore.instance.collection('highscores');
Future updateUserData(String name,int score) async {
return await highscoresCollection.doc(uid).set({
'score': score,
'name': name,
});
}
// high scores list from snapshot
List<HighscoreData> _highscoresListFromSnapshot(QuerySnapshot snapshot) {
return snapshot.docs.map((doc) {
return HighscoreData(
name: doc.get('name') ?? '', score: doc.get('score') ?? 0);
}).toList();
}
// Get highscores stream
Stream<List<HighscoreData>> get highscores{
return highscoresCollection
.where(('score'), isLessThanOrEqualTo: snapshot.get('score'))
.orderBy('score', descending: true,).limit(5)
.snapshots()
.map(_highscoresListFromSnapshot);
}
UserData _userDataFromSnapshot(DocumentSnapshot snapshot) {
return UserData(
uid: uid,
name: snapshot.get('name'),
score: snapshot.get('score'),
);
}
// Get user document
Stream<UserData> get userData {
return highscoresCollection.doc(uid).snapshots().map(_userDataFromSnapshot);
}
}
感谢您的帮助,如果您需要更多代码,请告诉我!
解决方案
这个问题是由于给null
定数据的值。你应该尽量null safety
避免这个问题。最好也分享您的错误行。但我认为这与snapshot.get('score')
代码之一有关。检查 的值snapshot
并确保该值不为空。此外,您可以使用snapshot?.get('score')
null 安全性。模式如下:
variable?.itsParameter
更新:检查空值并分配一个默认值
您可以检查它是snapshot
valuenull
吗?如果是,请分配一个默认值,或者执行您想要的所有操作,如下所示:
snapshot == null? "Your Default Value" : snapshot.get('score')
推荐阅读
- javascript - 散景 - 滑块、RadioGroup 回调冲突
- node.js - FeathersJS Mongoose 模型未正确将数据保存到数据库
- javascript - 如何传递参数以动态更改 IIFE
- c++ - 无法在 C++ 中将数据从父类继承到子类
- database - Flutter 中是否有任何预填充数据库使用的示例?
- rust - Rust 中奇怪的借用生命周期
- spring - JMSTemplate 中的 setSessionTransacted 究竟是什么意思?
- c++ - 处理当前进程(本身)
- python - 需要帮助将 RLE 转换为 ASCII 艺术
- c - 函数入门需要帮助输入数字(初学者)