You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter时间轴小部件开发:生成特定时间间隔列表问题求助

解决Flutter生成15分钟间隔30秒的时间列表问题

你的代码目前有两个核心问题:循环次数不足,导致生成的时间点数量不够;分钟和秒的计算逻辑错误,无法得到正确的时间格式。下面是修正后的实现方案:

问题分析

  1. 循环次数错误:15分钟内间隔30秒,总共有 (15*60)/30 + 1 = 31 个时间点(从00:00到15:00),但你的循环只执行了16次(i从0到15),漏掉了一半的时间点。
  2. 时间计算逻辑错误:(i * 60) % 1 * 60.floor() 这种写法完全不符合分钟和秒的转换逻辑,应该基于累计的总秒数来拆分分钟和秒。

修正后的代码

void addTime() {
  setState(() {
    timelines.clear(); // 先清空列表避免重复添加
    const totalMinutes = 15;
    const intervalSeconds = 30;
    final totalSeconds = totalMinutes * 60;
    
    // 循环生成所有时间点,从0秒到totalSeconds,每次加intervalSeconds
    for (int i = 0; i <= totalSeconds; i += intervalSeconds) {
      final minutes = i ~/ 60;
      final seconds = i % 60;
      timelines.add(buildTime(minute: minutes, sec: seconds));
    }
  });
}

// 示例buildTime函数,负责格式化时间为指定字符串或构建Widget
String buildTime({required int minute, required int sec}) {
  // 格式化分钟:小于10补前导零,大于等于10直接显示
  final minuteStr = minute < 10 ? '0$minute' : '$minute';
  // 格式化秒:同样小于10补前导零
  final secStr = sec < 10 ? '0$sec' : '$sec';
  return '$minuteStr:$secStr';
}

关键说明

  • 循环逻辑:通过i += intervalSeconds直接按30秒间隔累加总秒数,确保每个时间点都被覆盖。
  • 时间转换:用i ~/ 60获取分钟数(整数除法),i % 60获取剩余秒数,这是拆分时间的标准方式。
  • 格式化处理:对分钟和秒进行补零操作,保证输出格式统一(比如00:30、01:00,而非0:30、1:00)。

这样修改后,就能生成你需要的[00:00, 00:30, 01:00, ..., 15:00]格式的时间列表了。

内容的提问来源于stack exchange,提问作者Frank Slayer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 12:05:21