createSleepDurationData function
List<SleepDetailChart>
createSleepDurationData({
- required double parentWidth,
- required List<
SleepDetail> details, - 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;
}