如何从DocumentReference构建对象?

时间:2019-08-04 16:54:51

标签: firebase asynchronous flutter dart future

因此,我正在构建应用程序,但在理解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不是小部件。

有什么建议吗?

0 个答案:

没有答案