Flutter报错String不是int子类型,Firebase价格字段解析错误如何解决
问题原因
你定义的Productss实体类中price字段为int类型,但Firebase Firestore中存储的price字段值为字符串格式,Dart不会自动完成String到int的类型转换,因此赋值时触发类型不匹配异常。
解决方案
方案1:修改Firestore存储格式(推荐)
直接进入Firebase控制台,将homearchive集合下所有文档的price字段类型修改为数字类型,从根源避免类型转换问题,后续也不会产生额外的转换逻辑开销。
方案2:代码中做类型兼容转换
如果不方便修改数据库存储格式,可修改报错行的代码,手动做类型转换,根据你的业务场景可选以下写法:
确定存储的字符串可转为int时使用
price: int.parse(element.data()["price"])
兼容字段可能是int也可能是String的场景
price: (element.data()["price"] is String) ? int.parse(element.data()["price"]) : element.data()["price"] as int
加异常兜底,避免非法值导致崩溃
不管读取到的是字符串还是数字,先统一转成字符串再尝试转int,转换失败返回默认值0:
price: int.tryParse(element.data()["price"].toString()) ?? 0
额外优化建议
你当前实体类构造函数中使用的@required注解是旧版写法,如果你使用的是支持空安全的Flutter版本(2.0及以上),可以将@required改为Dart内置的required关键字,无需额外导入注解包,兼容性更好。
内容的提问来源于stack exchange,提问作者Aakib Algohar
相关产品推荐
相关产品推荐

