firebase - 错误:无法在字段初始化程序中访问“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 永远不应为空,但是,我不知道如何告诉班级这一点。
任何帮助将不胜感激。
谢谢
解决方案
您需要使用方法或构造函数来访问类的实例字段,例如:
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);
}
推荐阅读
- php - 上传到随机命名目录,是否足够(安全方面)?
- python-2.7 - 使用 Python 流式传输 MP4 视频
- php - 在codeigniter中使用额外字段的onclick事件存储数据
- python - Django 2.0 使用views.py 呈现一个html 页面(TemplateDoesNotExist)
- jquery - 如何附加从 Web 服务返回的 html
- python - 将鼠标悬停在条形图上时如何注释 X 和 Y 的值
- python - 使用 beautifulsoup 从类中提取子类
- ios - 如何从 url 下载多个音频文件并在 App 中离线播放
- php - PHPExcel 不返回带有文本格式的单元格值
- jenkins - 为什么在 Jenkins 2.124 上找不到 s3Upload 构建步骤