【发布时间】:2022-10-04 23:37:12
【问题描述】:
我需要使用以下 key-value 对在 List 中创建 96 个 Map 对象
{
'id': 1,
'time': '00:00-00:15',
'slotNumber': '01',
'clicked': false
}
尽管使用循环可以轻松实现这一点,但主要的复杂性是在生成时间范围时开始的。每个对象中的 time 键需要以 15 分钟为间隔,并且应该采用 24 小时格式。例如,接下来的几个时间范围需要是00:15-00:30、00:30-00:45、00:45-01:00,等等。我努力寻找一个能满足我所有祈祷的包裹,但找不到任何东西。
最终输出需要看起来像这样:
var kSlots = [
{'id': 1, 'time': '00:00-00:15', 'slotNumber': '01', 'clicked': false},
{'id': 2, 'time': '00:15-00:30', 'slotNumber': '02', 'clicked': false},
{'id': 3, 'time': '00:45-01:00', 'slotNumber': '03', 'clicked': false},
{'id': 4, 'time': '01:00-01:15', 'slotNumber': '04', 'clicked': false},
{'id': 5, 'time': '01:15-01:30', 'slotNumber': '05', 'clicked': false},
{'id': 6, 'time': '01:30-01:45', 'slotNumber': '06', 'clicked': false},
{'id': 7, 'time': '01:45-02:00', 'slotNumber': '07', 'clicked': false},
{'id': 8, 'time': '02:00-02:15', 'slotNumber': '08', 'clicked': false}]
由于我现在需要从字符串中的给定开始日期生成时间,因此我尝试稍微修改@jamesdlin 的答案来实现这一点。但它会引发以下错误:
Uncaught Error: FormatException: Invalid date format
08:00
String getTimeRange(int i) {
var midnight = DateTime.parse(DateFormat('HH:mm').format(DateTime.parse('08:00')));
const interval = Duration(minutes: 15);
var start = midnight.add(interval * i);
var end = start.add(interval);
var formatTime = DateFormat('HH:mm').format;
return '${formatTime(start)}-${formatTime(end)}';
}
void main() {
var slots = [
for (var i = 0; i < 20; i += 1)
<String, dynamic>{
'id': i + 1,
'time': getTimeRange(i),
'slotNumber': '${i + 1}'.padLeft(2, '0'),
'clicked': false,
},
];
slots.forEach(print);
}
【问题讨论】: