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
相关产品推荐
相关产品推荐

