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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 09:21:04