调用GUser.fromData解析Firebase JSON无返回值问题排查求助
问题根因
GUser.fromData方法执行过程中抛出了异常,代码走到这行直接中断进入catch块,因此不会打印后续的"GG"。你当前的catch块没有打印异常日志,所以无法直观看到错误原因。
已知必现错误点
- 数值类型转换错误
Firebase中存储的数值字段读取后默认是num类型,你直接调用double.parse()传入非字符串类型的数值,会直接抛出类型不匹配异常。 - 列表类型转换错误
你声明的position是List<Position>类型,直接[data['position']]的写法有两个问题:- 若Firebase中
position本身就是数组,你相当于把整个数组作为单个元素塞进新列表,结构完全错误 - 没有将数组的单个元素转换为
Position实例,类型不匹配直接抛异常
- 若Firebase中
- 潜在拼写错误
你代码中声明列表类型时写的是List<Positon>,正常该类名应该是Position(少了字母i),如果类名拼写不一致也会抛出类型错误。
修复方案
- 先给catch块增加异常日志打印,方便后续定位其他潜在问题
catch (e, stackTrace) { print('异常信息: $e'); print('异常堆栈: $stackTrace'); if (e is PlatformException) return e.message; return e.toString(); }
- 修复数值转换逻辑,将
double.parse()替换为num转double的写法
bal = (data['bal'] as num).toDouble(), rpl = (data['rpl'] as num).toDouble(), upl = (data['upl'] as num).toDouble(),
- 修复position列表转换逻辑,需要遍历数组元素转换为Position实例
// 需提前保证你的Position类已经实现了fromJson转换方法 position = (data['position'] as List<dynamic>).map((item) => Position.fromJson(item)).toList(),
- 检查确认类名拼写统一,避免把
Position写成Positon。
内容的提问来源于stack exchange,提问作者SARVESH KOTHEKAR
相关产品推荐
相关产品推荐

