firebase - Flutter with firebase 试图在与我的登录屏幕不同的屏幕或小部件上访问当前用户
问题描述
所以我有一个用于登录屏幕的 dart 文件,然后是一个不同的主文件。我正在尝试访问主文件中的用户 ID 以获取用户唯一的 Cloud Firestore 文档。但是,每当我调用 getUser() 时,它都会说 Future 不是“String”类型的子类型。这是否意味着由于某种原因未打开 Future 以返回 uid 字符串?
getUser() async {
FirebaseUser user = await FirebaseAuth.instance.currentUser();
return user.uid;
}
这是我在与身份验证不同的 dart 文件中调用 get user 的地方,但在与我的 getUser() 函数相同的文件中。
return StreamBuilder<DocumentSnapshot>(
stream: Firestore.instance.collection('watchlists').document(getUser()).snapshots(),
builder: (BuildContext context, AsyncSnapshot<DocumentSnapshot> snapshot){
if (snapshot.hasError) {
return new Center(
child: Text('Error: ${snapshot.error}'),
);
}
if (!snapshot.hasData) {
return new Center(
child: CircularProgressIndicator(),
);
}
else {
var documents = snapshot.data.data;
var vals = documents.values;
List<WatchListItem> watchListItems = [];
for (int x = 0; x < vals.length; x++) {
watchListItems.add(
WatchListItem(
symbol: vals.elementAt(x).toString(),
price: 190.79,
),
);
}
return new Center(
child: ListView(
children: watchListItems,
),
);
}
},
);
当我尝试 getUser().toString() 时,我得到的错误是在 null 上调用了 getter 'values'(我正在尝试获取数据库值)。当前用户只能在认证时访问吗?或者只要用户登录,就可以随时在应用程序的任何地方访问它?我看到的一种解决方法是在登录时获取 uid,然后将其作为参数传递给我去的每个新 Widget。我在这方面遇到了非常艰难的时期,因为不知何故,谷歌几乎没有任何关于将他们自己的 Flutter 与他们的 Firebase 结合使用的文档。
解决方案
getUser()
返回 a Future<String>
whiledocument()
接受 aString
作为参数:
/// so that the resulting list will be chronologically-sorted.
DocumentReference document([String path]) =>
DocumentReference._(_delegate.document(path), firestore);
因此最好打电话的地方getUser()
是里面initState
。在里面initState
你可以做:
String userId = await getUser();
然后使用userId
indocument()
推荐阅读
- .net - 刷新不适用于 dotnet core 3 中的静态页面
- java - 如何使用 vlcj 播放 mp4?
- api - 如何从 Golang 中的服务器发送 websocket
- python - Python 使用字符串执行计算
- python - Pandas bfill 和 ffill 如何用于数字和非数字列
- python - 如果 xlsx 表中存在该值而不知道索引号,如何获取该值?
- python - 使用 python3 网页抓取仅打印网页的一个链接
- google-docs-api - 使用 Google Docs API 创建文档时避免计算 startIndex 和 endIndex
- vba - 一次成功复制后,循环内的 VBA FileCopy 失败;问题:如何在下次使用前关闭文件?
- html - 以彩虹图案为图标的颜色设置动画