我的问题是,打开页面时未设置变量。因此,当我从Firestore查询时,出现错误The method '[]' was called on null. Receiver: null Tried calling: []("userbio")
我声明了2个变量
var userid;
var useremail;
然后我写了这个 future 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;
}
这是我目前正在尝试setState的方式,但是它不起作用void initState() {
setState(() {
userid = uid;
useremail = email;
});
}
请帮忙,谢谢。如果您需要更多上下文,请发表评论
最佳答案
似乎您是在声明嵌套函数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中的预定义名称。尽量不要将那些名称用于不会覆盖原始名称的功能。
关于flutter - 打开页面时如何始终设置状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63014328/