Flutter中是否有类似C#的AutoMapper对象映射包可供使用?
Flutter 生态下类似 C# AutoMapper 的实体映射方案
有两类成熟方案可以实现你需要的实体到模型的映射能力,均能达到你示例的调用效果:
1. 运行时映射方案(无需预生成代码,使用更便捷)
使用体验最接近 AutoMapper 的是 auto_mapper 包,无需提前运行构建命令,全局配置一次映射规则即可全局使用:
配置规则示例
// 全局仅需配置一次,支持自定义字段转换、嵌套类映射、集合映射 Mapper.mapping<Entity, EntityModel>((entity) => EntityModel( id: entity.id, name: entity.name, // 其余字段映射规则可自行补充 ));
调用示例(和你预期的逻辑完全匹配)
final mapper = Mapper(); final entity = Entity(); final EntityModel entityModel = mapper.map<Entity, EntityModel>(entity);
2. 代码生成类映射方案(编译时类型安全,性能更高)
中大型项目更推荐使用代码生成类的映射方案,代表是 mapper_generator 包,虽然需要提前运行构建命令生成映射代码,但可以在编译期就发现字段不匹配的问题,不会出现运行时映射异常,性能也远高于基于反射的运行时映射方案。
使用步骤
- 定义映射类并添加注解
@Mapper() class EntityMapper extends ClassMapperBase<Entity> { @override EntityModel map(Entity entity) => EntityModel( id: entity.id, name: entity.name, ); }
- 运行构建命令生成代码:
dart run build_runner build - 调用映射:
final entityModel = EntityMapper().map(entity);
提示:Flutter 官方禁用了 dart:mirror 反射能力,所以纯运行时反射实现的映射包存在一定限制,比如不支持私有字段映射、特殊类型的自动推导,复杂映射场景优先选择代码生成类方案。
内容的提问来源于stack exchange,提问作者Vivek Godhani
相关产品推荐
相关产品推荐

