Flutter 如何在颤振中以30分钟分割小时?

Flutter 如何在颤振中以30分钟分割小时?,flutter,dart,Flutter,Dart,这是一个小时列表 {"success":true,"working_hours":[{"day":"Monday","start_time":"09:00","end_time":"17:00","is_holiday":false}]} 结束时间是17点。但是加上17点30分,它就额外显示了。 每当一个小时以_uu

这是一个小时列表

{"success":true,"working_hours":[{"day":"Monday","start_time":"09:00","end_time":"17:00","is_holiday":false}]}
结束时间是17点。但是加上17点30分,它就额外显示了。 每当一个小时以_uuu:00结束时,都会发生这种情况

例如: 如果回答是

[9:00, 9:30, 10:00, 10:30, 11:00, 11:30, 12:00, 12:30, 13:00, 13:30, 14:00, 14:30, 15:00, 15:30, 16:00, 16:30, 17:00, 17:30]
时间为:

{"day":"Monday","start_time":"11:00","end_time":"15:00","is_holiday":false}

看起来生成列表的逻辑不正确。您可以尝试以下操作:

[11:00, 11:30, 12:00, 12:30, 13:00, 13:30, 14:00, 14:30, 15:00, 15:30]
List hours=List.generate(hoursLeft*2-1,(i)=>'${startTime+(i/2.floor()}:${i%2==0?'00':'30'}')。toList();
首先,您需要生成N条记录,其中
N=hourslef*2-1
。减去1是因为,否则您将生成一条17:30的记录,因为
18-9=9
,您将生成
9*2=18
记录,但您只需要17就可以到达17:00。此外,在代码中使用
endTime(i/2)
,这应该会引发错误,因为endTime不是一种方法,不能以这种方式执行。

您可以使用from flift并实现预期结果。下面是示例代码段

拆分插槽的逻辑

List<String> hours = List.generate(hoursLeft * 2 - 1, (i) => '${startTime + (i/2).floor()}:${i%2 == 0 ? '00' : '30'}').toList();

最终结果将是
TimeOfDay
格式的插槽数组。您可以在
getTimeSlots
方法中格式化它,也可以在收到数组后格式化它。

准确地引用预期的内容以及您当前面临的问题。我希望时间应在30分钟内分配。。开始时间和结束时间应与响应中的开始时间和结束时间相同…如果我的理解没有错误,如果开始时间是10:00,结束时间是15:00,则需要将其拆分为10:00、10:30、11:00、11:30、12:00、12:30、13:00、13:30、14:00、14:30,15:00正确?响应的开始时间是9:00,结束时间是17:00。但是从上面的代码中,你可以看到开始时间9:00是正确的,但结束时间17:30是错误的。嗨@snaksa,我尝试了上面的代码。。我得到的响应是{“开始时间”:“00:30”,“结束时间”:“07:30”},我得到的输出是[0:00,0:30,1:00,1:30,2:00,2:30,3:00,3:30,4:00,4:30,5:30,6:00,6:30,7:00],这是不正确的。。
List<String> hours = List.generate(hoursLeft * 2 - 1, (i) => '${startTime + (i/2).floor()}:${i%2 == 0 ? '00' : '30'}').toList();
Iterable<TimeOfDay> getTimeSlots(TimeOfDay startTime, TimeOfDay endTime, Duration interval) sync* {
  var hour = startTime.hour;
  var minute = startTime.minute;

  do {
    yield TimeOfDay(hour: hour, minute: minute);
    minute += interval.inMinutes;
    while (minute >= 60) {
      minute -= 60;
      hour++;
    }
  } while (hour < endTime.hour || (hour == endTime.hour && minute <= endTime.minute));
}
final startTime = TimeOfDay(hour: 9, minute: 0);
final endTime = TimeOfDay(hour: 22, minute: 0);
final interval = Duration(minutes: 30);

final times = getTimeSlots(startTime, endTime, interval)
      .toList();
print(times);