Firebase Flatter-Firestore正在向inistate语句上的映射返回空数据

Firebase Flatter-Firestore正在向inistate语句上的映射返回空数据,firebase,flutter,google-cloud-firestore,setstate,Firebase,Flutter,Google Cloud Firestore,Setstate,这是我的密码: void initState() { likesRef = FirebaseFirestore.instance.collection('likes').doc(currentUser); super.initState(); likesRef.get().then((value) => data = value.data()); postRef = FirebaseFirestore.instance.collection('Products'); } @ov

这是我的密码:

void initState() {
 likesRef = FirebaseFirestore.instance.collection('likes').doc(currentUser);
 super.initState();
 likesRef.get().then((value) => data = value.data());
 postRef = FirebaseFirestore.instance.collection('Products');
}


@override
Widget build(BuildContext context) {
 print('data $data');
我获得了空数据,但在firestore中我有数据:

尝试以下操作:

void initState() {
 super.initState();
 likesRef = FirebaseFirestore.instance.collection('likes').doc(currentUser);
 likesRef.get().then((value){
   data = value.data();
    setState(() {});
  });
 postRef = FirebaseFirestore.instance.collection('Products');
}

重写时始终在重写时首先调用超级方法,以确保在代码中执行任何其他操作之前调用父类方法。然后,在检索数据后,可以调用
setState
以使用数据值重建小部件树。另一种方法是使用
futurebuilder
widget。

谢谢Peter的回答,这是工作,但第一次读取时会变为空,有什么想法吗?因为从firebase检索数据是异步完成的,因此,最初使用data=null调用build方法,然后当您调用setstate时,它将使用数据再次构建。检查一下,再次感谢彼得抽出时间!,这是完美的工作!,后来代码没有输入到一些if,因为我在firebase的一些字段开头有空格,