flutter如何实现time_picker时间选择器
在Flutter中如何实现一个时间选择器(TimePicker)?我想让用户能够方便地选择时间,最好能自定义样式和默认时间。官方文档提到了一些方法,但不太清楚具体怎么实现,有没有完整的代码示例或推荐的三方库?另外,如何获取用户选择的时间并处理回调?
2 回复
Flutter 中可使用内置的 showTimePicker 方法实现时间选择器,示例代码如下:
TimeOfDay? selectedTime = await showTimePicker(
context: context,
initialTime: TimeOfDay.now(),
);
如需自定义样式,可使用第三方库如 flutter_cupertino_date_picker 或自定义组件。
更多关于flutter如何实现time_picker时间选择器的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中,可以通过以下几种方式实现时间选择器:
1. 使用内置 showTimePicker
这是最简单的方式,调用系统自带的时间选择器:
Future<void> _selectTime() async {
final TimeOfDay? picked = await showTimePicker(
context: context,
initialTime: TimeOfDay.now(),
builder: (BuildContext context, Widget? child) {
return Theme(
data: ThemeData.light().copyWith(
colorScheme: ColorScheme.light(
primary: Colors.blue, // 主题色
),
),
child: child!,
);
},
);
if (picked != null) {
print('选择的时间: ${picked.format(context)}');
}
}
2. 使用第三方库 flutter_datetime_picker
在 pubspec.yaml 中添加依赖:
dependencies:
flutter_datetime_picker: ^1.5.1
使用示例:
DatePicker.showTimePicker(
context,
showTitleActions: true,
onConfirm: (time) {
print('选择的时间: $time');
},
currentTime: DateTime.now(),
);
3. 自定义时间选择器
如果需要完全自定义,可以创建自己的时间选择器组件:
class CustomTimePicker extends StatefulWidget {
@override
_CustomTimePickerState createState() => _CustomTimePickerState();
}
class _CustomTimePickerState extends State<CustomTimePicker> {
int _selectedHour = 0;
int _selectedMinute = 0;
@override
Widget build(BuildContext context) {
return AlertDialog(
title: Text('选择时间'),
content: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
// 小时选择
Column(
children: [
Text('小时'),
SizedBox(
height: 150,
child: ListWheelScrollView(
itemExtent: 50,
children: List.generate(24, (index) =>
Text('$index', style: TextStyle(fontSize: 20))
),
onSelectedItemChanged: (index) {
setState(() {
_selectedHour = index;
});
},
),
),
],
),
// 分钟选择
Column(
children: [
Text('分钟'),
SizedBox(
height: 150,
child: ListWheelScrollView(
itemExtent: 50,
children: List.generate(60, (index) =>
Text('$index', style: TextStyle(fontSize: 20))
),
onSelectedItemChanged: (index) {
setState(() {
_selectedMinute = index;
});
},
),
),
],
),
],
),
actions: [
TextButton(
onPressed: () => Navigator.pop(context),
child: Text('取消'),
),
TextButton(
onPressed: () {
final selectedTime = TimeOfDay(
hour: _selectedHour,
minute: _selectedMinute
);
Navigator.pop(context, selectedTime);
},
child: Text('确定'),
),
],
);
}
}
使用方式
// 调用自定义选择器
void _showCustomTimePicker() async {
final TimeOfDay? result = await showDialog(
context: context,
builder: (context) => CustomTimePicker(),
);
if (result != null) {
print('选择的时间: ${result.format(context)}');
}
}
推荐使用内置的 showTimePicker,因为它提供了良好的用户体验且无需额外依赖。如果需要更多自定义功能,可以考虑第三方库或自己实现。

