createSleepDurationData function

List<SleepDetailChart> createSleepDurationData({
  1. required double parentWidth,
  2. required List<SleepDetail> details,
  3. required int totalDuration,
})

创建睡眠时长图表数据 根据原始睡眠详情数据计算每个阶段在图表中的宽度和持续时间 @param parentWidth 父容器宽度 @param details 原始睡眠详情数据列表 @param totalDuration 总睡眠时长(分钟) @return 处理后的睡眠详情图表数据列表

Implementation

List<SleepDetailChart> createSleepDurationData({
  required double parentWidth,
  required List<SleepDetail> details,
  required int totalDuration,
}) {
  if (details.isEmpty) return [];

  List<SleepDetailChart> result = [];

  for (int i = 0; i < details.length; i++) {
    final currentDetail = details[i];
    final nextDetail = i < details.length - 1 ? details[i + 1] : null;

    // 计算当前阶段持续时间(分钟)
    final durationMinutes = nextDetail != null
        ? nextDetail.time.difference(currentDetail.time).inMinutes
        : 0;

    // 计算百分比
    final percentage = durationMinutes / totalDuration;

    // 计算宽度
    final width = parentWidth * percentage;

    // 创建SleepDetailChart
    result.add(SleepDetailChart(
      model: currentDetail.stage,
      width: width,
      startTime: currentDetail.time,
      endTime: nextDetail?.time ?? currentDetail.time.add(Duration(minutes: durationMinutes)),
      duration: durationMinutes,
    ));
  }

  return result;
}