首页 > 解决方案 > Flutter/Dart 如何映射一个 OBJECT

问题描述

我有以下对象将返回以下结构Map<int, List<Map<String, dynamic>>>

我现在需要将该对象转换为Map<int, List<StatisticsData>>,那么我该如何实现呢?!

我试过了

Map<int, List<StatisticsData>> d = groupByType.map(
  (key, value) => {
    key: value.map(
      (e) => StatisticsData(e['date'], e['total'])
    ).toList()
  }
);

但它总是弹出一个错误!那:

The return type 'Map<int, List<StatisticsData>>' isn't a 'MapEntry<int, List<StatisticsData>>', as required by the closure's context

我的代码:

final List<Map<String, dynamic>> data = rows.map(
  (row) {
    final String date = row.read<String>('date');
    final double total = row.read<double>('total');
    final int type = row.<int>read('type');

    return {
      'date': date,
      'total': total,
      'type': type
    };

  }
).toList();

Map<int, List<Map<String, dynamic>>> groupByType = groupBy(
  data, 
  ( Map<String, dynamic> obj ) => obj['type']
);

Map<int, List<StatisticsData>> statisticsData;

统计数据类:

class StatisticsData {
  final String name;
  final dynamic value;

  StatisticsData(this.name, this.value);

  
}

标签: androidflutterdart

解决方案


正如错误消息所说,您必须返回一个 MapEntry:

  Map<int, List<StatisticsData>> d = groupByType.map(
    (key, value) => MapEntry(
      key,
      value.map((e) => StatisticsData(e['date'], e['total'])).toList(),
    ),
  );

推荐阅读