You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter时间选择报错:Future<TimeOfDay?>无format实例方法

解决Flutter时间选择器NoSuchMethodError错误

错误原因

showTimePicker是异步方法,返回的是Future<TimeOfDay?>类型对象,你直接将其赋值给pickedTime后就调用format方法,此时pickedTime是未完成的Future实例,并非TimeOfDay对象,因此会抛出NoSuchMethodError。

修正方案

将_getTimefromUser改为异步函数,通过await等待Future完成,获取实际的TimeOfDay?对象后再进行格式化和后续逻辑处理:

Future<void> _getTimefromUser({required bool isStartTime}) async {
  TimeOfDay? pickedTime = await _showTimePicker();

  if (pickedTime == null) {
    print('Time Canceled');
  } else {
    String _formatedTime = pickedTime.format(context);
    if (isStartTime) {
      _startTime = _formatedTime;
    } else {
      _endTime = _formatedTime;
    }
    // 更新UI需调用setState
    setState(() {});
  }
}

Future<TimeOfDay?> _showTimePicker() {
  return showTimePicker(
    initialEntryMode: TimePickerEntryMode.input,
    context: context,
    initialTime: TimeOfDay(
      hour: int.parse(_startTime.split(':')[0]),
      minute: int.parse(_startTime.split(':')[1].split('')[0]),
    ),
  );
}

关键修改点

  • 给_getTimefromUser添加async关键字,并指定返回类型为Future<void>
  • 使用await等待_showTimePicker()执行完成,获取实际的时间选择结果
  • 调整逻辑顺序:先判断pickedTime是否为null(用户取消选择),再执行格式化操作
  • 如果时间变量用于界面展示,修改后调用setState(() {})触发UI更新

内容的提问来源于stack exchange,提问作者Alyik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 11:55:16