Flutter 中 showTimePicker 设置 24H

在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

你可能感兴趣的:(flutter,flutter)