【问题标题】:Error: Can't access 'this' in a field initializer to read 'uid' [duplicate]错误:无法在字段初始化程序中访问“this”以读取“uid”[重复]
【发布时间】:2020-08-19 20:51:34
【问题描述】:

希望有人可以帮助我解决这个问题。我有一个 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 永远不应为空,但是,我不知道如何告诉班级这一点。

任何帮助将不胜感激。

谢谢

【问题讨论】:

    标签: firebase flutter dart google-cloud-firestore


    【解决方案1】:

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

    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);
     } 
    

    【讨论】:

    • 感谢您的帮助,但我仍然很困惑。如何/在哪里调用 getData? database.dart 文件现在是:class DatabaseService { final String uid;数据库服务({this.uid}); void getData(){ final Query flashCardWordsCollection = Firestore.instance.collection('vobuWords') .where("SelectedToStudy", isEqualTo: true) .where("DocBelongsTo", isEqualTo: uid) .orderBy("LastFlashCard", 降序:错误的); } Stream> get flashCardWords { return flashCardWordsCollection.snapshots().map(_vobuWordListFromSnapshot); }
    • @MSW 检查我的编辑 `return DatabaseService(uid : this.uid).getData().snapshots()
    • 你需要创建一个DatabaseService的实例然后你可以调用getdata
    猜你喜欢
    • 2021-07-31
    • 1970-01-01
    • 2021-07-08
    • 1970-01-01
    • 2021-05-18
    • 2019-11-20
    • 2022-01-15
    • 2011-05-15
    相关资源
    最近更新 更多