Flutter FutureBuilder不返回任何内容-Cloud Firestore和反序列化

时间:2020-07-28 11:54:28

标签: firebase flutter dart google-cloud-firestore deserialization

我有以下问题。我正在尝试从名为锦标赛的Firestore集合中接收数据。我正在从我的DatabaseService类中查询数据库。如下所示:

sid
2       100
30      11
56       5
73      25
78       2
132      1
        ..
8531    25
8616     2
9049     1
9125     6
9316    11

该小部件实现了FutureBuilder

class Collection<T> {
  final Firestore _db = Firestore.instance;
  final String path;
  CollectionReference ref;

  Collection({this.path}) {
    ref = _db.collection(path);
  }

  Future<List<Tournament>> getData() async {
    var snapshots = await ref.getDocuments();
    return snapshots.documents
        .map((doc) => Global.models[Tournament](doc.data))
        .toList();
  }
}

我想将Firestore数据反序列化为Tournament对象。我将锦标赛类定义为:

Widget build(BuildContext context) {
    return FutureBuilder(
      future: Global.tournamentRef.getData(),
      builder: (BuildContext context, AsyncSnapshot snap) {
        if (snap.connectionState == ConnectionState.done) {
          List<Tournament> tournaments = snap.data;
...

最后一个重要的类是globals.dart

class Tournament {
  String id;
  String name;
  String mode;
  String owner;
  int size;

  Tournament({this.id, this.name, this.mode, this.owner, this.size});

  factory Tournament.fromMap(Map data) {
    return Tournament(
        id: data["id"] ?? '',
        mode: data["mode"] ?? '',
        name: data["name"] ?? "group",
        owner: data["owner"] ?? "",
        size: data["size"] ?? 6);
  }
}

它只是指定收集路径。我希望对数据进行反序列化,但是我不知道为什么它不返回任何内容。我尝试以一种简单的老式方式来查询数据库,例如

class Global {

  static final Map models = {Tournament: (data) => Tournament.fromMap(data)};

  static final Collection<Tournament> tournamentRef =
      Collection<Tournament>(path: "tournaments");
}

这很好用,但是完全不能反序列化。我想我有时会错过一些东西,并且您可能会注意到,我仍然是Flutter / dart入门者,其中一些讨论的主题对我来说有点太复杂了。

感谢您的帮助。 谢谢

0 个答案:

没有答案