convertCowDataToGraphData method Null safety

List<BarDataDay> convertCowDataToGraphData(
  1. {required List<CowData>? cowData,
  2. DateTime? targetDateTime,
  3. int continuedDays = 0,
  4. required GraphViewType graphViewType,
  5. ActionType? actionType}
)

소데이터를 그래프 데이터로 변환합니다.

Implementation

List<BarDataDay> convertCowDataToGraphData({
  required List<CowData>? cowData,
  DateTime? targetDateTime,
  int continuedDays = 0,
  required GraphViewType graphViewType,
  ActionType? actionType,
}) {
  if (targetDateTime != null) targetDateTime = DateTime(targetDateTime.year, targetDateTime.month, targetDateTime.day);
  List<CowDataDay> cowDataDays = cowData != null && cowData.length > 0 ? cowData.first.data : [];
  List<BarDataDay> barDatasDay = [];
  for (CowDataDay cowDataDay in cowDataDays) {
    DateTime date = cowDataDay.date!;
    String xLabelDate = DateFormat("MM/dd").format(date);
    List<BarDataHour?> barDatasHour = List.filled(graphViewType.hourCntInDay, null);
    bool isHighlighted = false;
    for (CowDataHour cowDataHour in cowDataDay.cowDataHour) {
      double value = 0, realValue = 0, valueBottom = 0, realValueBottom = 0;
      DateTime dateTime = cowDataHour.datetime!;
      switch (actionType) {
        case ActionType.lactation:
          value = cowDataHour.lactation.value;
          realValue = cowDataHour.lactation.value;
          isHighlighted = cowDataHour.lactation.isHighlighted == true;
          break;
        case ActionType.ruminant:
          value = cowDataHour.ruminant.value;
          realValue = cowDataHour.ruminant.value;
          isHighlighted = cowDataHour.ruminant.isHighlighted == true;
          break;
        case ActionType.eating:
          value = cowDataHour.eating.value;
          realValue = cowDataHour.eating.value;
          isHighlighted = cowDataHour.eating.isHighlighted == true;
          break;
        case ActionType.drinking:
          value = cowDataHour.drinking.value;
          realValue = cowDataHour.drinking.value;
          isHighlighted = cowDataHour.drinking.isHighlighted == true;
          break;
        case ActionType.heading:
          value = cowDataHour.heading.value.toDouble();
          realValue = cowDataHour.heading.value.toDouble();
          isHighlighted = cowDataHour.heading.isHighlighted == true;
          break;
        case ActionType.sittingStanding:
        case ActionType.standing:
        case ActionType.sitting:
          value = cowDataHour.standing.value;
          realValue = cowDataHour.standing.value;
          valueBottom = cowDataHour.sitting.value;
          realValueBottom = cowDataHour.sitting.value;
          isHighlighted = cowDataHour.standing.isHighlighted == true || cowDataHour.sitting.isHighlighted == true;
          break;
        case ActionType.cough:
          value = cowDataHour.cough.value.toDouble();
          realValue = cowDataHour.cough.value.toDouble();
          isHighlighted = cowDataHour.cough.isHighlighted == true;
          break;
        case ActionType.activity:
          value = cowDataHour.activity.value;
          realValue = cowDataHour.activity.value;
          isHighlighted = cowDataHour.activity.isHighlighted == true;
          break;
        case ActionType.impulse:
        case ActionType.irregularSittingStanding:
        case ActionType.standingFail:
        case ActionType.doridori:
          break;
      }

      String suffix, valueLabel, valueBottomLabel;
      if (actionType == ActionType.heading || actionType == ActionType.cough) {
        suffix = "회";
      } else if (actionType == ActionType.activity) {
        suffix = "";
        realValue = realValue * NumericConstants.activityScale;
        value = value * NumericConstants.activityScale;
      } else {
        suffix = "분";
        realValue = (realValue / 60).roundToDouble();
        value = (value / 60).roundToDouble();
        realValueBottom = (realValueBottom / 60).roundToDouble();
        valueBottom = (valueBottom / 60).roundToDouble();
      }
      valueLabel = "${realValue.roundToDouble().toInt()}$suffix";
      valueBottomLabel = "${realValueBottom.roundToDouble().toInt()}$suffix";

      barDatasHour[cowDataHour.hour] = BarDataHour(
        value: value,
        valueLabel: valueLabel,
        valueBottomLabel: valueBottomLabel,
        realValue: realValue,
        label: "${graphViewType.hourUnit == GraphViewType.W1.hourUnit ? "$xLabelDate" : "${cowDataHour.hour}시"}",
        dateTime: dateTime,
        valueBottom: valueBottom,
        realValueBottom: realValueBottom,
        isHighlighted: isHighlighted,
      );
    }
    BarDataDay barDataDay = BarDataDay(
      barDataHour: barDatasHour,
      dateTime: date,
      sunRiseDateTime: DateTime.now(),
      sunSetDateTime: DateTime.now(),
      label: DateFormat(StringConstants.timeYMDDotFormat).format(date),
    );
    barDatasDay.add(barDataDay);
  }
  return barDatasDay;
}