来自flutter中的firebase数据,firebase,flutter,dart"/>

首页 > 解决方案 > 如何构建地图来自flutter中的firebase数据

问题描述

我正在尝试从firebase创建一个地图作为地图。

我试过这个

    Future<Map<DateTime, List>> getlist() async {
        QuerySnapshot querySnapshot = await Firestore.instance
        .collection("${_username.toLowerCase()}-orders")
        .getDocuments();
        var list = new List.generate(querySnapshot.documents.length, (int index) => querySnapshot.documents[index]['date']);
        var datelist = list.toSet().toList();
        var map = new Map.fromIterable(datelist,
    key: (item) => DateTime.parse(item),
    value: (item) => () async {
      QuerySnapshot querySnapshot2 = await Firestore.instance
        .collection("${_username.toLowerCase()}-orders")
        .where('date', isEqualTo: item)
        .getDocuments();
      var ordlist = new List.generate(querySnapshot2.documents.length, (int index) => querySnapshot2.documents[index]['name']);
      return ordlist;
    });
    print(map);
    return map;
  }

我收到这样的错误

The return type 'Map<DateTime, () → Future<List<dynamic>>>' isn't a 'Future<Map<DateTime, List>>', as defined by the method 'getlist'.dart(return_of_invalid_type)

帮我

标签: firebaseflutterdart

解决方案


在你的value:论点中,你有一个错字。你写的是(item) => () async {...}你可能的意思(item) async {...}。你写的是一个箭头函数,它返回一个函数。

即使在那之后,您将拥有的是 aMap<Datetime, Future<List<dynamic>>并且您需要解决所有这些问题Future才能获得Map<DateTime, List<dynamic>>. 我注意到您正在为每个日期进行新查询,但我认为您应该在第一次查询后已经有了这些值......

看起来groupByfrompackage:collection会让你非常接近,你仍然需要再.map调用一次来提取'name'字段......

Future<Map<DateTime, List>> getlist() async {
  var querySnapshot = await Firestore.instance
      .collection("${_username.toLowerCase()}-orders")
      .getDocuments();
  var items = querySnapshot.documents;
  var grouped = groupBy(items, (item) => item['date']);
  var map =
      grouped.map((date, item) => MapEntry(DateTime.parse(date), item['name']));
  print(map);
  return map;
}

推荐阅读