parseData method

void parseData(
  1. Map<String, Map<String, List<ChannelItemInfo>>> allDataMap,
  2. List<Series<LinearSales, DateTime>> allLineShowList,
  3. List<Series<LinearSales, DateTime>> lineShowList,
  4. Map<String, int> singleItemSumCostMap,
  5. Map<String, bool> singleItemShowMap,
  6. List<LineListItemBean> listViewDataList,
)

解析处理数据

Implementation

void parseData(
  Map<String, Map<String, List<ChannelItemInfo>>> allDataMap,
  List<charts.Series<LinearSales, DateTime>> allLineShowList,
  List<charts.Series<LinearSales, DateTime>> lineShowList,
  Map<String, int> singleItemSumCostMap,
  Map<String, bool> singleItemShowMap,
  List<LineListItemBean> listViewDataList,
) {
  Map<String, List<LinearSales>> lineData = {};
  int i = 0;
  var keys = allDataMap.keys.take(days);
  keys.forEach((dateStr) {
    var dayItem = allDataMap[dateStr]!;
    dayItem.forEach((channelName, value) {
      var filterList = value.where((element) {
        if (!platForms.contains(element.platformName)) {
          platForms.add(element.platformName);
        }
        if (currentPlatForms == "全平台") {
          return true;
        } else {
          return element.platformName == currentPlatForms;
        }
      }).map((e) => e.cost);

      int sumCost = 0;
      if (filterList.length > 0) {
        sumCost = filterList.reduce((value, element) => value + element);
      }
      int averageCost = sumCost ~/ value.length;

      //get all cost time
      if (singleItemSumCostMap.containsKey(channelName)) {
        singleItemSumCostMap[channelName] =
            singleItemSumCostMap[channelName]! + averageCost;
      } else {
        singleItemSumCostMap[channelName] = averageCost;
      }
      if (!lineData.containsKey(channelName)) {
        lineData[channelName] = [];
      }

      var chanNameLine = LinearSales(channelName, i, dateStr, averageCost);
      lineData[channelName]!.add(chanNameLine);
    });
    i++;
  });

  i = 0;
  singleItemSumCostMap.forEach((channelName, sumCost) {
    double average = sumCost / allDataMap.length;
    if (average > maxAverage) {
      maxAverage = average;
    }
    listViewDataList.add(LineListItemBean(
        channelName, linesColors[i++ % linesColors.length], average));
  });
  lineData.forEach((channelName, value) {
    allLineShowList.add(charts.Series<LinearSales, DateTime>(
      id: channelName,
      colorFn: (LinearSales sales, __) {
        return listViewDataList
            .firstWhere((element) => element.name == channelName)
            .lineColor;
      },
      domainFn: (LinearSales sales, _) {
        var dateTime = DateFormat("yyyy-MM-dd").parse(sales.x);
        return dateTime;
      },
      measureFn: (LinearSales sales, _) => sales.value,
      data: value,
    ));
  });

  sortData(listViewDataList, desc);
  filterLine(allLineShowList, singleItemShowMap, lineShowList);
}