You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 12:24:02