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

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;
    
    直接修改为字符串类型:
    final String id;
    
    因为Firebase Realtime Database自动生成的节点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,提问作者Ерулан Кайырбеков

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 16:47:11