Firebase 获取特定Firestore文档数据并将其存储到字符串变量中

Firebase 获取特定Firestore文档数据并将其存储到字符串变量中,firebase,flutter,google-cloud-firestore,Firebase,Flutter,Google Cloud Firestore,我试图从Firestore获取数据,并将数据存储到名为time的字符串变量中。然后将变量放入_事件中 然而,当我运行代码时,我得到了null,我不知道为什么 StateFulWidget... String event; Map<DateTime, List> _events; @override void initState() { super.initState(); Firestore.instance.collection('events').document('201

我试图从Firestore获取数据,并将数据存储到名为time的字符串变量中。然后将变量放入_事件中

然而,当我运行代码时,我得到了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]
};
}
StateFulWidget。。。
字符串事件;
地图事件;
@凌驾
void initState(){
super.initState();
Firestore.instance.collection('events')。文档('2019-07-
30')。get()。然后((
文档快照(ds){
事件=ds[‘时间’];
});
_事件={
DateTime.parse(“2019-08-01”):[事件]
};
}

我是个新手,我为这个问题奋斗了很长时间。希望有人能帮助我

多谢各位

更新

我更改代码

但是,我仍然得到错误:方法[](DateTime的Intance)被调用为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]
 };
字符串事件;
地图事件;
Future getData()异步{
最终ds=等待
Firestore.instance.collection('events').document('2019-07-30').get();
返回ds['time'];
}
@凌驾
void initState(){
super.initState();
getData()。然后((s){
事件=s;
//当我打印时,它正确地显示了数据
});
_事件={
DateTime.parse(“2019-08-01”):[事件]
};
有人能告诉我哪里错了吗


谢谢!

您没有在等待结果,即\u events=..将在之前运行。然后()子句,这就是event变量仍然为空的原因

.get()是一个未来,因此您需要等待结果

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

event = ds['time'];

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

您没有等待结果,即\u events=..将在之前运行。然后()子句,这就是event变量仍然为空的原因

.get()是一个未来,因此您需要等待结果

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

event = ds['time'];

_events = {
  DateTime.parse("2019-08-01"): [event]
};
这对我很有用:

Firestore().instance.collection('Collection Name')
.document('Document Name').get().then((data) async {
                     var dataReceive = data['property Name'];
                     }
这对我很有用:

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

time=ds.data[“time”];抱歉,我写错了,在我的实际代码中,它一直是事件,在我的实际代码中没有时间变量。您的Future没有返回任何内容。Future getData…我尝试使用Future,但仍然显示errorstime=ds.data[“time”];对不起,我写错了,在我的实际代码中,它一直是事件,我的实际代码中没有时间变量。您的Future不会返回任何内容。Future getData…我尝试使用Future,但仍然显示错误感谢您的帮助,但我不知道将ds放在哪里。我应该将其放在initState还是类中?此外,我无法添加Wait without Async抱歉,我是第一行中创建并在第二行中使用的FlatterDS的新手。将所有这些放在它自己的方法中并返回_事件,然后在需要数据时调用该方法。我更改了代码,但仍然出现错误。您能告诉我哪里出错了吗?很抱歉再次询问您。非常感谢!感谢您的帮助您的帮助,但我不知道把ds放在哪里。我应该把它放在initState还是类中?另外,我不能在没有AsyncName的情况下添加Wait对不起,我是新来的。ds是在第一行中创建的,在第二行中使用的。将所有这些放在它自己的方法中并返回_事件,然后在需要数据时调用该方法。我更改了代码,但是,它仍然是获取错误。您能告诉我哪里出错了吗?很抱歉再次询问您。非常感谢!这是异步任务您必须等待,然后您可以在获取值后使用setstate方法更新UI这是异步任务您必须等待,然后您可以在获取值后使用setstate方法更新UI