【发布时间】:2021-05-07 03:00:01
【问题描述】:
import 'package:flutter/material.dart';
class Time extends StatefulWidget {
@override
_TimeState createState() => _TimeState();
}
class _TimeState extends State<Time> {
String time = "Press Button to see time";
bool isSelected = false;
@override
Widget build(BuildContext context) {
TimeOfDay startTime = TimeOfDay(hour: 01, minute: 00);
final endTime = TimeOfDay(hour: 23, minute: 59);
final step = Duration(minutes: 5);
Iterable<TimeOfDay> getTimes(
TimeOfDay startTime, TimeOfDay endTime, Duration step) sync* {
var hour = startTime.hour;
var minute = startTime.minute;
do {
yield TimeOfDay(hour: hour, minute: minute);
minute += step.inMinutes;
while (minute >= 60) {
minute -= 60;
hour++;
}
} while (hour < endTime.hour ||
(hour == endTime.hour && minute <= endTime.minute));
}
final times = getTimes(startTime, endTime, step)
.where((t) =>
t.minute >= TimeOfDay.now().minute &&
t.hour >= TimeOfDay.now().hour)
.map((tod) => tod.format(context));
return Scaffold(
body: SafeArea(
child: Container(
width: MediaQuery.of(context).size.width,
child: Wrap(
direction: Axis.horizontal,
children: times
.map<Widget>(
(t) => GestureDetector(
onTap: () {
setState(() {
isSelected = !isSelected;
});
},
child: Container(
margin: EdgeInsets.all(10.0),
decoration: BoxDecoration(
color: isSelected ? Colors.deepOrange : Colors.white,
border: Border.all(
color: Colors.deepOrange,
width: 1,
),
borderRadius: BorderRadius.circular(
10.0,
),
boxShadow: [
BoxShadow(
color: isSelected ? Colors.black26 : Colors.white,
blurRadius: 5,
offset: Offset(2, 2),
)
]),
padding: EdgeInsets.all(10.0),
child: Text(
t,
style: TextStyle(
color: isSelected ? Colors.white : Colors.deepOrange,
),
),
),
),
)
.toList(),
),
),
),
);
}
}
我想问一下,如果现在时间不到 10 点,比如说 9:30。它正在显示它,因为它不是我正在寻找的 09:30。你能告诉我怎么做吗?此外,如果我点击任何一个容器,它们都会被选中。我如何获得它,以便只有用户按下的容器被选中。我怎么知道用户选择了哪一个你能帮我解决这个问题吗
【问题讨论】: