firebase - 如何在 flutter 中从 firebase 数据构建 Map<DateTime, List>

标签 firebase flutter dart

我正在尝试从 firebase 创建一个 map 作为 Map。

我试过了

    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)

帮帮我

最佳答案

在你的value:参数你打错了。你写的是(item) => () async {...}当你可能意味着 (item) async {...} .你写的是一个箭头函数,它返回一个函数。

即使在那之后,您将拥有一个 Map<Datetime, Future<List<dynamic>>你需要解决所有这些 Future得到 Map<DateTime, List<dynamic>> .我注意到您正在为每个日期执行一个新查询,但我认为您应该在第一次查询后就已经有了这些值...

看起来像 groupBy 来自 package: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;
}

关于firebase - 如何在 flutter 中从 firebase 数据构建 Map<DateTime, List>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56689045/

相关文章:

flutter - 如何在 Flutter 中隐藏 float 操作按钮

url - 如何获取URL中的查询参数

firebase - Flutter Firebase数据库运行事务崩溃

flutter - 如何在 flutter 中创建没有应用栏的标签栏?

android - Firebase:无法初始化崩溃报告

flutter - 无法更改TextFormField边框宽度

random - 是否有 Dart 包用于随机分布?

android - flutter : How to control conflicting gestures?

javascript - 解析函数触发器时发生 Cloud Functions for Firebase 错误

database - Firebase Angular2 - 如何在没有太多开销的情况下查询和呈现列表