Flutter类型转换错误:_Map无法转为Filters类型,模型使用遇阻求助
解决Flutter中Map转自定义Filters类的类型错误
你遇到的_Map<String, List<Map<String, Object>>>' is not a subtype of type 'Filters' in type cast错误,核心原因是不能直接把原生Map类型通过as强制转换成自定义的Filters类——这两种类型没有继承或实现关系,强转必然失败。
要把Map数据转换成自定义类实例,需要手动解析Map中的字段,逐个映射到类的属性上。具体步骤如下:
给
Regions类添加从Map创建实例的方法
修改Regions类,新增一个工厂构造函数,用来将单个区域的Map数据转换成Regions对象:class Regions with ChangeNotifier { final String id; final String region; final String image; Regions({required this.id, required this.region, required this.image}); // 从Map构造Regions实例 factory Regions.fromMap(Map<String, dynamic> map) { return Regions( id: map['id'].toString(), // 注意:原始数据id是int,模型里是String,需要转换 region: map['region'] as String, image: map['image'] as String, ); } }给
Filters类添加从Map创建实例的方法
同样给Filters类添加工厂构造函数,解析Map中的regions列表,逐个转换成Regions实例后传入:class Filters with ChangeNotifier { final List<Regions> regions; Filters({required this.regions}); // 从Map构造Filters实例 factory Filters.fromMap(Map<String, dynamic> map) { final regionsList = map['regions'] as List<dynamic>; final regions = regionsList .map((regionMap) => Regions.fromMap(regionMap as Map<String, dynamic>)) .toList(); return Filters(regions: regions); } }正确创建
Filters实例
现在不再用强转,而是调用Filters.fromMap方法来转换原始Map数据:final extractedData = Filters.fromMap({ "regions": [ {"id": 1, "region": "Ljubljana", "image": "ljubljana.jpg"} ] });
自定义类是你自己定义的类型,和Flutter原生的Map属于完全不同的类型体系。必须通过手动解析Map的每个键值对,将数据映射到类的属性上,才能创建出合法的类实例,而不是简单的强制类型转换。
内容的提问来源于stack exchange,提问作者Gregor Kuplenik
相关产品推荐
相关产品推荐

