Flutter数据获取异常:String类型无法作为index的int子类型求助
问题排查与解决
异常根源
type 'String' is not a subtype of type 'int' of 'index' 这个异常的核心原因是:你把字符串类型的产品ID当成了整数类型的列表索引来使用,或者你的Product类中id字段被定义为int类型,但你传入了Firebase返回的字符串ID。
具体解决步骤
1. 修正Product类的id字段类型
打开Product类的定义,检查id字段的类型:
- 若原本是整数类型声明:
直接修改为字符串类型:final int id;
因为Firebase Realtime Database自动生成的节点ID是字符串格式(如截图中的final String id;-Nx...样式),和你代码里extractedData的键prodId类型完全匹配。
2. 排查并修正索引类操作
如果Product类的id已经是字符串类型,检查后续代码中是否存在把product.id当作列表索引的错误用法,比如:
// 错误:用字符串ID作为列表索引(列表索引要求是整数) var targetProduct = _items[product.id];
替换为通过ID匹配查找元素的正确写法:
// 正确:通过ID匹配定位目标元素 var targetProduct = _items.firstWhere((prod) => prod.id == product.id);
3. 确认数据解析逻辑
你当前的fetchAndSetProducts代码中,extractedData.forEach((prodId, prodData)的prodId是Firebase返回的合法字符串键,只要Product类的id字段是字符串类型,id: prodId这个赋值逻辑就不存在类型冲突。
内容的提问来源于stack exchange,提问作者Ерулан Кайырбеков
相关产品推荐
相关产品推荐

