Flutter获取特定的Firestore文档数据并将其存储到String变量中

时间:2019-08-02 05:31:37

标签: firebase flutter google-cloud-firestore

我正在尝试从Firestore中获取数据并将数据存储到名为time的String变量中。然后将变量放入_event。

但是,当我运行代码时,我得到了null,而且我也不知道为什么。

StateFulWidget...

String event;
Map<DateTime, List> _events;

@override
void initState() {
super.initState();

Firestore.instance.collection('events').document('2019-07- 
30').get().then((
    DocumentSnapshot ds) {
  event = ds['time'];
});

_events = {
  DateTime.parse("2019-08-01"): [event]
};
}

This is my Firestore document

我是Flutter的新手,我为这个问题苦苦挣扎了很长时间。希望有人可以帮助我

非常感谢您

更新

我更改密码。

但是,我仍然遇到错误:方法[](“ DateTime”的实例)在null上被调用。

String event;
Map<DateTime, List> _events;

Future<String> getData()async{
final ds = await 
Firestore.instance.collection('events').document('2019-07-30').get();
return ds['time'];
}

 @override
 void initState() {
 super.initState();

 getData().then((s) {
    event = s;
  //when I print(s), it showed the data correctly
  });


 _events = {
  DateTime.parse("2019-08-01"): [event]
 };

有人可以告诉我我哪里错了吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

您不是在等待结果,即 _events = .. 将在 .then()子句之前运行,这就是 event 的原因变量仍然为空;

.get()是Future,因此您需要等待结果。

final ds = await Firestore.instance.collection('events').document('2019-07- 
30').get();

event = ds['time'];

_events = {
  DateTime.parse("2019-08-01"): [event]
};

答案 1 :(得分:0)

这对我有用:

Firestore().instance.collection('Collection Name')
.document('Document Name').get().then((data) async {
                     var dataReceive = data['property Name'];
                     }