在Flutter 可以使用 showTimePicker 调起 时间的插件
GestureDetector(
onTap: () async {
TimeOfDay? d = await showTimePicker(
context: context,
initialTime: TimeOfDay.now(),
builder: (context, child) {
return MediaQuery(
data: MediaQuery.of(context).copyWith(alwaysUse24HourFormat: true),
child: child ?? const Text("")
)
}
)
}
)
print(d) // TimeOfDay(13:00)
但是获取到的时间是 24H制的 ,然后通过 format
方法转换以后 还是 12H制,真心有点看不懂了
String time = d.format(context).toString()
print(time) // 01:00
万事不懂,看源码,在源码中找到 TimeOfDay
类,找到format
方法.转换时间的时候,需要传入alwaysUse24HourFormat
,
- 源码:
String format(BuildContext context) {
assert(debugCheckHasMediaQuery(context));
assert(debugCheckHasMaterialLocalizations(context));
final MaterialLocalizations localizations = MaterialLocalizations.of(context);
return localizations.formatTimeOfDay(
this,
alwaysUse24HourFormat: MediaQuery.of(context).alwaysUse24HourFormat, // 获取到全局设置
);
}
这个应该是在全局应用的,但是我的只在当前页面使用 24H制,因此我的方案是
getDataTime(TimeOfDay d) {
final MaterialLocalizations localizations =
MaterialLocalizations.of(context);
var time = localizations.formatTimeOfDay(
d, // 源码中的 this
alwaysUse24HourFormat: true // 直接设置true
);
String str = time.toString();
String selectTime = str + ":00";
return selectTime;
}
String selectTime = getDataTime(d!);
print(selectTime) // 13:00:00