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

如何修复_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,或者你错误地将其当作了可通过字符串键访问的映射结构。

修复步骤

  1. 确认Firestore文档结构
    登录Firebase控制台,检查users集合下对应_uid.value的文档,确保name、profilePhoto是文档的顶级字段,而非嵌套在数组(List)中的元素。如果这些字段是数组的一部分,你需要用整数索引访问,而非字符串键。

  2. 明确类型转换,避免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类型
    
  3. 添加空安全兜底
    为了避免字段不存在导致的空值问题,给字段赋值加上默认值:

    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;
    
  4. 额外排查点
    检查_uid.value的类型:确保它是字符串类型(Firestore文档ID都是字符串),如果_uid.value是List类型,会导致doc()调用异常,但结合错误信息,这个概率较低。

内容的提问来源于stack exchange,提问作者Aqib Majeed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 09:46:40