flutter - 打开页面时如何始终设置状态?
问题描述
我的问题是,当页面打开时,我的变量没有设置。所以当我从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;
}
这就是我目前尝试 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()
, like build()
or setState()
, 是 Flutter 中预定义的名称。尽量不要将这些名称用于未覆盖原始名称的函数。
推荐阅读
- mathematical-optimization - 使用 SCS 执行 SDP 的椭球拟合期间的数值问题?
- c++ - 求解具有未知幂的模幂
- c - strcmp() 2 个变体返回不同,为什么?
- clojure - clojure中循环drop和take组合的解释
- sql - Oracle SQL-如果满足该行的条件,则从第二个表添加列
- python - 改变函数参数的类型提示装饰器
- python - 当我尝试将 JSON 文件读取为 Pandas 时出错
- c - 为什么我不能检查我是否在 tdm-gcc 编译器中包含了 stdlib.h?
- python - PySide2:窗口没有响应
- ajax - 不捕获 ajax 中的类