首页 > 解决方案 > 打开页面时如何始终设置状态?

问题描述

我的问题是,当页面打开时,我的变量没有设置。所以当我从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;
          });
        }
    

请帮忙,谢谢。如果您需要更多上下文,请发表评论

标签: flutterdartstate

解决方案


似乎您正在声明嵌套函数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(), 是 Fl​​utter 中预定义的名称。尽量不要将这些名称用于未覆盖原始名称的函数。


推荐阅读