打开页面时如何始终设置状态?

时间:2020-07-21 12:13:37

标签: flutter dart state

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

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

2 个答案:

答案 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 = '';