我想从 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()),
);
}
}
请帮帮我! :(
答案 0 :(得分:0)
你甚至没有打电话给getData()
,是吗?变量初始化为 null。 totalCalories
使用时仍然为空,因为初始化后没有给它赋值。
使用带有 FutureBuilder
的 getData()
作为等待查询完成的未来。如果快照的 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
}
它应该可以工作。