DateTime.parse触发App崩溃:无效日期格式问题排查求助
问题原因与解决方案
核心问题:逻辑运算符误用
你的代码里判断条件错误使用了||(逻辑或),而非&&(逻辑与):
_variable = myString!=null||myString!="" ? DateTime.parse("$myString") : DateTime.now();
当myString是空字符串时,myString!=null为true,myString!=""为false,||只要任一条件为真就会执行DateTime.parse("$myString"),但空字符串属于非法日期格式,直接触发FormatException。
修复步骤
- 修正逻辑运算符,将
||改为&&,确保仅当字符串非空且非null时才尝试解析:
_variable = myString != null && myString.isNotEmpty ? DateTime.parse(myString) : DateTime.now();
注:用myString.isNotEmpty替代myString!="",语义更清晰
- 额外增加异常捕获(可选但推荐)
即使字符串非空,也可能存在格式不合法的情况(比如SharedPreferences中存入了不符合DateTime解析规则的内容),建议包裹try-catch避免崩溃:
void myfunction() async{ SharedPreferences prefs = await SharedPreferences.getInstance(); String myString = prefs.getString("key") ?? ""; DateTime parsedDate; try { if (myString.isNotEmpty) { parsedDate = DateTime.parse(myString); } } catch (e) { // 解析失败时使用当前时间 parsedDate = DateTime.now(); } _variable = parsedDate ?? DateTime.now(); }
内容的提问来源于stack exchange,提问作者Nitneuq
相关产品推荐
相关产品推荐

