首页 > 解决方案 > 在 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);
  }
}

感谢您的帮助,如果您需要更多代码,请告诉我!

标签: firebaseflutterdartdart-null-safety

解决方案


这个问题是由于给null定数据的值。你应该尽量null safety避免这个问题。最好也分享您的错误行。但我认为这与snapshot.get('score')代码之一有关。检查 的值snapshot并确保该值不为空。此外,您可以使用snapshot?.get('score')null 安全性。模式如下:

variable?.itsParameter

更新:检查空值并分配一个默认值 您可以检查它是snapshotvaluenull吗?如果是,请分配一个默认值,或者执行您想要的所有操作,如下所示:

snapshot == null? "Your Default Value" : snapshot.get('score')

推荐阅读