Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
552 views
in Technique[技术] by (71.8m points)

firebase - 在异步方法抖动后将空值获取到变量(Getting null value to a variable after async method flutter)

I'm getting null value in flutter build method for this code.

(在此代码的flutter构建方法中,我得到了空值。)

  String userEmail;
  var data;
  String userName;
  @override
  void initState(){
      setState(() {
        getUserName();
        print(userName);
      });
    super.initState();
  }

  void getUserName() async {
    MyFirebaseAuth myFirebaseAuth = MyFirebaseAuth();
    userEmail =await myFirebaseAuth.getUser();
    if (userEmail == null){
      print("no user");
    }
    else{
      data =await fb.firestore().collection('users').doc(userEmail).get().then((onValue){
        return onValue.data();
      });
      print(data);
      print(data['name']);
      userName = data['name'];
      print("Username is $userName");
    }
  }

output is

(输出是)

Performing hot restart...

(正在执行热重启...)

Restarted application in 759ms.

(在759毫秒内重新启动应用程序。)

null {entries: 3, name: xmr} vraj Username is xmr

(空{输入:3,名称:xmr} vraj用户名是xmr)


  ask by Susan Pandit translate from so

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

The getUserName is future so the method should be

(getUserName是将来的,因此方法应为)

Future<void>getUserName() async {
MyFirebaseAuth myFirebaseAuth = MyFirebaseAuth();
userEmail =await myFirebaseAuth.getUser();
if (userEmail == null){
  print("no user");
}
else{
  data =await fb.firestore().collection('users').doc(userEmail).get().then((onValue){
    return onValue.data();
  });
  print(data);
  print(data['name']);
  userName = data['name'];
  print("Username is $userName");
}
}

And also make sure to use setState inside the getUserName() instead of initState

(还要确保在getUserName()中使用setState而不是initState)


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...