首页 > 解决方案 > 错误:无法在字段初始化程序中访问“this”以读取“uid”

问题描述

希望有人可以帮助我解决这个问题。我有一个 StreamProvider 可以很好地解决这个问题:

class DatabaseService {
  final String uid;
  DatabaseService({this.uid});

  final Query flashCardWordsCollection = Firestore.instance.collection('MyWords')
      .where("SelectedToStudy", isEqualTo: true)
      .where("DocBelongsTo", isEqualTo: "rgDe5I0QgFfax123Igxo8VQew9T2")
      .orderBy("LastFlashCard", descending: false);

但是,我需要将 DocBelongsTo 过滤器更改为基于当前登录到应用程序的用户。当我尝试这个时:

class DatabaseService {
  final String uid;
  DatabaseService({this.uid});

  final Query flashCardWordsCollection = Firestore.instance.collection('MyWords')
      .where("SelectedToStudy", isEqualTo: true)
      .where("DocBelongsTo", isEqualTo: uid)
      .orderBy("LastFlashCard", descending: false);

在 home_screen.dart 我这样调用 StreamProvider 的地方:

final user = Provider.of<User>(context);

return StreamProvider<List<VoBuWord>>.value(
  value: DatabaseService(uid: user.uid).flashCardWords ,

我收到以下错误:

lib/services/database.dart:11:41: Error: Can't access 'this' in a field initializer to read 'uid'.
      .where("DocBelongsTo", isEqualTo: uid)

从我一直在做的研究中,我了解到这是由于在调用它时可能已设置或未设置 uid,因此我收到错误消息。但我不知道如何解决这个问题。

用户必须先登录才能使用该应用程序,因此理论上 uid 永远不应为空,但是,我不知道如何告诉班级这一点。

任何帮助将不胜感激。

谢谢

标签: firebaseflutterdartgoogle-cloud-firestore

解决方案


您需要使用方法或构造函数来访问类的实例字段,例如:

Query getData(){
  return Firestore.instance.collection('MyWords')
      .where("SelectedToStudy", isEqualTo: true)
      .where("DocBelongsTo", isEqualTo: uid)
      .orderBy("LastFlashCard", descending: false);
  }

然后调用它只是做:

Stream<List<VoBuWord>> get flashCardWords {
 return getData().snapshots().map(_vobuWordListFromSnapshot);
 } 

推荐阅读