我正在尝试从 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/