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

Flutter中如何将Map<String, dynamic>转换为Map<int, String>?

解决Firestore返回Map<String, dynamic>转Map<int, String>的类型转换问题

你在Firestore中创建了如下结构的Map:

{
    1: '1000',
    2: '400',
    3: '800',
    4: '7000',
    5: '5000',
    6: '300',
    7: '2000',
    8: '100',
};

通过PackageModel模型接收时,range字段被Firestore序列化为_InternalLinkedHashMap<String, dynamic>,当你尝试用pack.range as Map<int, String>强转时,触发了类型转换错误:

Exception has occurred.
_CastError (type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'Map<int, String>' in type cast)

方法1:在fromJson方法中直接完成转换

修改PackageModel的fromJson方法,把Firestore返回的原始Map直接转换成Map<int, String>,后续使用时无需再处理类型:

class PackageModel {
  String? id;
  final String? name;
  String? description;
  int? price;
  String? pcolor;
  String? img;
  Map<int, String>? range; // 直接指定目标类型

  PackageModel({
    this.id,
    this.name,
    this.description,
    this.price,
    this.img,
    this.pcolor,
    this.range,
  });

  static PackageModel fromJson(Map<String, dynamic> json) {
    Map<int, String>? convertedRange;
    if (json['range'] != null) {
      final rawRange = json['range'] as Map<String, dynamic>;
      convertedRange = rawRange.map((key, value) => 
        MapEntry(int.parse(key), value.toString())
      );
    }

    return PackageModel(
      id: json['id'],
      name: json['name'],
      description: json['description'],
      price: json['price'],
      img: json['img'],
      pcolor: json['pcolor'],
      range: convertedRange,
    );
  }
}

方法2:编写独立转换函数

如果不想修改模型类,可以单独写一个工具函数,在需要使用range时调用转换:

Map<int, String> convertRange(Map<String, dynamic> rawRange) {
  return rawRange.map((key, value) => 
    MapEntry(int.parse(key), value.toString())
  );
}

使用示例:

// 替换原强转代码
updatePackageRange(convertRange(pack.range as Map<String, dynamic>));

额外提示

  • 确保Firestore中range的键都是可解析为int的字符串,若存在异常键,可改用int.tryParse避免崩溃
  • 如果值的类型不确定,value.toString()能保证统一转为字符串,可根据实际业务调整转换逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 03:50:24