我尝试到检查如果一个用户id是相同的作为这当前用户的id通过使用data.uid但是我keep得到这错误:
没有为类型“Object”定义getter“uid”。
这是密码
Widget build(BuildContext context) {
return FutureBuilder(
future: Future.value(FirebaseAuth.instance.currentUser),
builder: (context, futureSnapshot){
if(futureSnapshot.connectionState == ConnectionState.waiting){
return Center(child: CircularProgressIndicator(),);
}
return StreamBuilder <QuerySnapshot>(
stream: firestore.collection('chats').orderBy('timeStamp', descending: true).snapshots(),
builder:(ctx, chatSnapshot){
if(chatSnapshot.connectionState == ConnectionState.waiting){
return Center(child: CircularProgressIndicator(),);
}
final chatdocs = chatSnapshot.data!.docs;
return ListView.builder(
reverse: true,
itemCount: chatdocs.length ,
itemBuilder: (ctx, index) => messageBubble(
chatdocs[index]['text'],
chatdocs[index]['userId'] == futureSnapshot.data!.uid, //this is the error
)
);
}
);
} );
4条答案
按热度按时间ntjbwcob1#
更改此内容:
改为:
zaqlnxep2#
您可以尝试json将您的变量解码为您要查找的User对象:如果
futureSnapshot.data
是用户,则可以使用uid
作为Map键来检查chatdocs[index]['userId']
就像这样:
yhxst69z3#
因为你没有在你的
FutureBuilder
中声明Future
的类型,它解析为Object
,并且Object
没有uid
属性,这就是为什么你会得到这个错误。要解决此问题,请声明
FutureBuilder
的类型,在您的示例中为:注意,我不知道为什么要在这里使用
FutureBuilder
,因为FirebaseAuth.instance.currentUser
是一个同步值,所以不需要使用FutureBuilder
来访问它,删除FutureBuilder
也会得到完全相同的结果。如果你想让你的代码响应身份验证状态的变化,比如当你启动应用时,Firebase需要一点时间来恢复用户的登录状态,那么现在你需要用
StreamBuilder
来监听authStateChanges
,如获取当前用户文档中的第一个代码片段所示。你需要用User
类型来声明你的StreamBuilder
,就像我们上面对FutureBuilder
所做的那样。vuv7lop34#
请尝试以下代码: