Flutter如何实现24小时制的TimePicker
在Flutter中如何实现24小时制的时间选择器?官方提供的TimePicker默认是12小时制带AM/PM的,但我需要在应用中使用24小时格式。是否有直接修改的配置选项,或者需要自定义实现?如果必须自定义,能否提供一个简单的实现方案或推荐好用的第三方库?
2 回复
在Flutter中,可以通过自定义Dialog或使用第三方包实现24小时制的时间选择器,因为默认的showTimePicker在iOS上可能显示12小时制。
推荐方法:使用flutter_cupertino_date_picker包
- 添加依赖到
pubspec.yaml:
dependencies:
flutter_cupertino_date_picker: ^1.0.26
- 实现代码:
import 'package:flutter_cupertino_date_picker/flutter_cupertino_date_picker.dart';
void _show24HourTimePicker() {
DatePicker.showDatePicker(
context,
pickerMode: DateTimePickerMode.time,
minuteDivider: 1,
dateFormat: 'HH:mm', // 24小时制格式
onConfirm: (DateTime date, List<int> selectedIndex) {
print('Selected time: ${date.hour}:${date.minute}');
},
);
}
自定义实现方案(使用基础组件):
Future<TimeOfDay?> show24HourTimePicker(BuildContext context) async {
final TimeOfDay? picked = await showTimePicker(
context: context,
initialTime: TimeOfDay.now(),
builder: (BuildContext context, Widget? child) {
return MediaQuery(
data: MediaQuery.of(context).copyWith(alwaysUse24HourFormat: true),
child: child!,
);
},
);
return picked;
}
注意:
- 第一个方法需要安装第三方包,但样式统一
- 第二个方法依赖系统时间选择器,在部分Android设备上可能仍显示12小时制
- 建议优先使用第三方包确保全平台一致性
调用方式:
ElevatedButton(
onPressed: () => _show24HourTimePicker(),
child: Text('选择时间'),
)


