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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值