[英]Unhandled Exception: NoSuchMethodError: The getter 'uid' was called on null
[英]NoSuchMethodError: 'The getter 'uid' was called on null' in flutter
我对 flutter 很陌生。 我得到了这个 NoSuchMethodError:在 null 上调用了 getter 'uid'。 我有很多帖子,似乎我需要将 await 与 async 一起使用。 但我不知道我该怎么做。 当我想传递用户的当前 uid 时,就会发生这种情况。 这是我的代码:
class ProfilePage extends StatefulWidget {
//final String userProfileId;
//ProfilePage({this.userProfileId});
@override
_ProfilePageState createState() => _ProfilePageState();
}
class _ProfilePageState extends State<ProfilePage> {
FirebaseUser thecurrentuser;
profilepicture() {
return FutureBuilder(
future: userReference.document(thecurrentuser.uid).get(), // So here I am getting the error
builder: (context, dataSnapshot) {
User user = User.fromDocument(dataSnapshot.data);
if (!dataSnapshot.hasData) {
return Padding(
padding: EdgeInsets.all(17.0),
}
User user = User.fromDocument(dataSnapshot.data);
return Padding(
padding: EdgeInsets.all(17.0),
child: Column(
children: <Widget>[
CircleAvatar(
radius: 45.0,
backgroundColor: Colors.grey,
backgroundImage: NetworkImage(
'https://upload.wikimedia.org/wikipedia/commons/9/9a/Mahesh_Babu_in_Spyder_%28cropped%29.jpg')),
Text(user.username),
Expanded(
flex: 1, child: Column(children: <Widget>[Text("coolbro")]))
],
),
);
});
}
我的用户 model
class User{
final String uid;
final String email;
final String username;
User({
this.uid,
this.email,
this.username,
});
factory User.fromDocument(DocumentSnapshot doc){
return User(
uid: doc['uid'],
email: doc['email'],
username: doc['username'] );
}
}
您没有初始化currentUser
,这就是它等于 null 的原因。 您应该执行以下操作:
Future<DocumentSnapshot> getData() async{
var firebaseUser = await FirebaseAuth.instance.currentUser();
return userReference.document(firebaseUser.uid).get();
}
因此,创建一个返回Future<DocumentSnapshot>
的方法,在该文档中,您可以检索当前用户并使用get()
检索数据。
然后在FutureBuilder
中,执行以下操作:
return FutureBuilder(
future: getData(),
if (!dataSnapshot.hasData) {
return Padding(
padding: EdgeInsets.all(17.0),
}
else if(dataSnapshot.hasData){
User user = User.fromDocument(dataSnapshot.data);
return Padding(
padding: EdgeInsets.all(17.0),
child: Column(
children: <Widget>[
CircleAvatar(
radius: 45.0,
backgroundColor: Colors.grey,
backgroundImage: NetworkImage(
'https://upload.wikimedia.org/wikipedia/commons/9/9a/Mahesh_Babu_in_Spyder_%28cropped%29.jpg')),
Text(user.username),
Expanded(
flex: 1, child: Column(children: <Widget>[Text("coolbro")]))
],
),
);
});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.