Flutter向Firebase添加日期时出现_CastError类型转换异常求助
错误原因分析
你代码里的_selectedDate是String类型,但DateFormat.yMd().format()方法要求传入的参数必须是DateTime类型,所以触发了类型转换错误。
看你的变量声明:
String _selectedDate = DateFormat("yyyy/mm/dd").format(DateTime.now()).toString();
这里format()本身返回的就是String,再调用toString()完全多余,而且直接把_selectedDate存成了字符串,后面用的时候自然没法直接传给需要DateTime的方法。另外注意:月份要用大写的MM,小写的mm代表分钟,这是常见的格式陷阱。
修正方案
有两种实用的处理方式,按需选择:
方式1:将_selectedDate存为DateTime类型(推荐)
日期逻辑处理用DateTime更灵活,是更合理的做法:
// 初始化时存储DateTime对象 DateTime _selectedDate = DateTime.now(); // 组件中使用时转换为目标格式 MyInputField( title: "Date", hint: DateFormat.yMd().format(_selectedDate) ) // 存入Firebase时,再转为yyyy/mm/dd格式的字符串 String dateForFirebase = DateFormat("yyyy/MM/dd").format(_selectedDate);
方式2:若必须存String,使用时先解析为DateTime
如果因需求限制要把_selectedDate存为String,需先将字符串解析为DateTime再传入format方法:
// 初始化时存储字符串(去掉多余的toString()) String _selectedDate = DateFormat("yyyy/MM/dd").format(DateTime.now()); // 组件中使用时先解析类型 MyInputField( title: "Date", hint: DateFormat.yMd().format(DateFormat("yyyy/MM/dd").parse(_selectedDate)) )
这种方式多了一次解析步骤,效率略低于方式1。
内容的提问来源于stack exchange,提问作者user20939040
相关产品推荐
相关产品推荐

