【发布时间】: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