Flutter解析Firebase返回的日期字符串出现FormatException错误如何解决
报错原因
Dart 内置的DateTime.parse()方法仅支持标准 ISO 8601 格式的日期字符串,你使用的自定义格式yyyy-MM-dd – kk:mm(含中间的长破折号与空格)不在默认支持范围内,所以抛出格式异常。
解决方案
你需要借助intl包的DateFormat类实现自定义格式的日期字符串解析,步骤如下:
- 先在项目的
pubspec.yaml文件中添加intl依赖:
dependencies: flutter: sdk: flutter intl: ^0.18.1 # 可替换为当前最新稳定版本
执行flutter pub get安装依赖。
- 在对应代码文件头部导入依赖:
import 'package:intl/intl.dart';
- 替换原来的日期解析逻辑,同时修正现有代码的隐藏问题:
原有代码中retriveDateTime是数据库引用对象,本身不可能为null,你需要判断的是拉取到的数值是否为空;另外insertDataToDatabase()放在then外部会导致异步请求还没拿到日期就执行插入逻辑,需要调整位置。
修正后的完整代码:
var retriveDateTime = database_Reference .child("users") .child(_wifiObject.macAddress) .child(DateFormat('dd-MM-yyyy').format(DateTime.now())); retriveDateTime.once().then((value) { if (value.value != null && value.value['startingTime'] != null) { String formatedtime = value.value['startingTime']; // 用自定义格式解析日期 startup_time = DateFormat('yyyy-MM-dd – kk:mm').parse(formatedtime); } else { startup_time = DateTime.now(); } insertDataToDatabase(); });
- 注意:若解析仍报错,请确认你的日期字符串中的分隔符(包括中间的破折号类型、前后空格)和
DateFormat构造参数里的格式完全一致。
内容的提问来源于stack exchange,提问作者Omar Ramadan
相关产品推荐
相关产品推荐

