我的问题是,打开页面时未设置变量。因此,当我从Firestore查询时,出现错误The method '[]' was called on null. Receiver: null Tried calling: []("userbio")
我声明了2个变量
var userid;
var useremail;
然后我写了这个未来
Future getUserData() async {
var firestore = Firestore.instance;
final FirebaseUser user = await FirebaseAuth.instance.currentUser();
final String uid = user.uid.toString();
final String email = user.email.toString();
DocumentReference qn = await firestore
.collection("users")
.document(email)
.collection('userdetails')
.document(uid);
void initState() {
setState(() {
userid = uid;
useremail = email;
});
}
return qn.documentID;
}
这是我目前正在尝试设置状态的方式,但是它不起作用
void initState() {
setState(() {
userid = uid;
useremail = email;
});
}
请帮助,谢谢。 发表评论,如果您需要更多上下文
答案 0 :(得分:1)
似乎您在声明嵌套函数initState()
,但您没有在调用它。我只是删除该函数并直接调用setState()
:
...
.document(uid);
setState(() {
...
编辑:在getUserData()
内调用initState
:
// In a class extending State<T>
@override
void initState() {
super.initState();
// synchronous call if you don't care about the result
getUserData();
// anonymous function if you want the result
() async {
var result = await getUserData();
}();
}
PS:initState()
,类似于build()
或setState()
,是Flutter中的预定义名称。尽量不要将那些名称用于不会覆盖原始名称的功能。
答案 1 :(得分:0)
尝试为变量分配一个空值,而不是将其保留为空。
var userid = '';
var useremail = '';