如何将我从数据库中读取的 Firestore 文档数据存储在变量中?

时间:2021-04-10 15:57:01

标签: firebase flutter google-cloud-firestore

我想从 Cloud Firestore 读取数据并将其存储在变量中。我尝试了很多方法,但每次都得到 'null'。

代码是:

 class Graph extends StatefulWidget {
  @override
  _GraphState createState() => _GraphState();
}
class _GraphState extends State<Graph> {

  var totalCalories;
  Future<void> getData() async {
    DocumentSnapshot ds =await  FirebaseFirestore.instance.collection('calories')
        .doc('01')
        .get();
    final _totalCalories = ds.data()['totalCalories'];
    setState(() {
      totalCalories = _totalCalories;
    });
  }
  @override
  Widget build(BuildContext context) {
    return Container(
      child: Text(totalCalories.toString()),
    );
  }

}  

请帮帮我! :(

2 个答案:

答案 0 :(得分:0)

你甚至没有打电话给getData(),是吗?变量初始化为 null。 totalCalories 使用时仍然为空,因为初始化后没有给它赋值。

使用带有 FutureBuildergetData() 作为等待查询完成的未来。如果快照的 Text 属性为 connectionState,则在构建器函数中返回 ConnectionState.done 小部件。在 else 块中,您可以返回诸如加载微调器之类的东西。

答案 1 :(得分:0)

改成这样:

String totalCalories = "waiting";

并将 initstate 添加到您的小部件:

String totalCalories = "waiting"; 
  Future<void> getData() async {
    DocumentSnapshot ds =await  FirebaseFirestore.instance.collection('calories')
        .doc('01')
        .get();
    final _totalCalories = ds.data()['totalCalories'];
    setState(() {
      totalCalories = _totalCalories;
    });
  }
@override
initState() {
  super.initState();
 getData(); // add getData here
}

它应该可以工作。