因此,我正在构建应用程序,但在理解Future以及如何编写异步代码方面遇到困难。我有以下建筑课:
class Building {
Building({this.name, this.address, this.position});
final String name;
final String address;
final LatLng position;
Marker marker() {
return Marker(
markerId: MarkerId(name),
position: position,
infoWindow: InfoWindow(
title: name,
snippet: address
)
);
}
}
我还有一个Event类,该类将Firebase DocumentReference用作参数。本文档包含构造Building类所需的所有信息。我想在Event类中具有建筑属性,即使用此Document中的信息进行构建。基本上,我希望能够执行以下操作:
class Event {
Icon icon = Icon(Icons.event);
Color color = Colors.blue;
final String name;
final DocumentReference buildingDoc;
final DateTime start;
final DateTime end;
final String type;
Building building;
Event({this.name, this.buildingDoc, this.start, this.end, this.type}) {
buildingDoc.get().then( (snapshot) {
building = Building(
name: snapshot.data["name"],
address: snapshot.data["name"],
position: snapshot.data["position"]
)
}
}
}
但是我的问题是创建事件后,当我尝试立即访问事件的建筑物数据时,由于没有足够的时间来启动建筑物属性,它无法正常工作。例如,
List<Event> events = List(10);
// Initiate list of events here...
print(events[2].building.name); // This returns null
我不能使用await,因为我不能使对象构造函数异步,我不能使用setState,因为Event不是小部件。
有什么建议吗?