如何修复_Typeerror(type 'String' is not a subtype of 'int' of 'index')错误?
错误分析与修复方案
错误原因
你遇到的TypeError (type 'String' is not a subtype of 'int' of 'index'),本质是用字符串作为索引去访问一个需要整数索引的对象(比如List)。结合你的代码来看,问题出在userData['name']这类写法上——这说明userDoc.data()返回的对象并非你预期的Map<String, dynamic>,而是一个List,或者你错误地将其当作了可通过字符串键访问的映射结构。
修复步骤
确认Firestore文档结构
登录Firebase控制台,检查users集合下对应_uid.value的文档,确保name、profilePhoto是文档的顶级字段,而非嵌套在数组(List)中的元素。如果这些字段是数组的一部分,你需要用整数索引访问,而非字符串键。明确类型转换,避免dynamic隐式错误
不要用as dynamic模糊转换,直接将文档数据转为明确的Map<String, dynamic>,这样能更早暴露结构不匹配的问题:DocumentSnapshot userDoc = await firestore.collection('users').doc(_uid.value).get(); final userData = userDoc.data()! as Map<String, dynamic>; // 明确转为Map类型添加空安全兜底
为了避免字段不存在导致的空值问题,给字段赋值加上默认值:String name = userData['name'] ?? '匿名用户'; String profilePhoto = userData['profilePhoto'] ?? '默认头像地址'; int likes = userData['likes'] ?? 0; int followers = userData['followers'] ?? 0; int following = userData['following'] ?? 0; bool isFollowing = userData['isFollowing'] ?? false;额外排查点
检查_uid.value的类型:确保它是字符串类型(Firestore文档ID都是字符串),如果_uid.value是List类型,会导致doc()调用异常,但结合错误信息,这个概率较低。
内容的提问来源于stack exchange,提问作者Aqib Majeed
相关产品推荐
相关产品推荐

