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

如何编写通用函数支持不同Model作为入参,无需为每个Model单独写函数?

解决方案

完全不需要为每个Model单独编写处理函数,只需要做少量改造即可实现通用函数适配所有Model场景,具体改造步骤如下:


步骤1:统一Model序列化约束

首先定义一个通用的BaseModel抽象类,要求所有需要参与JSON序列化的Model都实现该接口,确保每个Model都有统一的toJson方法:

abstract class BaseModel {
  // 约束所有Model必须实现toJson方法返回可序列化的Map结构
  Map<String, dynamic> toJson();
}

// 原有Model改造示例
class ScheduleModel implements BaseModel {
  // 原有属性代码不变
  String? arrivalDate;
  // ...其他属性

  @override
  Map<String, dynamic> toJson() {
    // 原有序列化逻辑,把你之前的toJsonn方法改成统一的toJson即可
    return {
      "arrivalDate": arrivalDate,
      // ...其他字段映射
    };
  }
}

class RoutesModel implements BaseModel {
  // 原有属性代码不变

  @override
  Map<String, dynamic> toJson() {
    // 原有序列化逻辑
    return {
      // ...对应字段映射
    };
  }
}

步骤2:改造通用JSON转换函数

把原来固定入参为ScheduleModel的转换函数改成接收BaseModel类型,适配所有符合约束的Model:

static String toJsonConversion(BaseModel data) {
  final jsonData = data.toJson();
  return json.encode(jsonData);
}

步骤3:封装通用请求函数

把公共的请求逻辑抽成通用函数,把可变的请求路径、Model实例、自定义特殊逻辑作为入参传入:

static Future<bool> commonUpdate(
  // 可变参数1:对应接口的后缀路径
  String apiPath, 
  // 可变参数2:任意符合BaseModel约束的Model实例
  BaseModel data, 
  // 可选参数:不同接口需要的特殊自定义逻辑,比如之前的打印操作
  {void Function(BaseModel data)? customLogic}
) async {
  final response = await client.put(
    Uri.parse('$mainAPI$apiPath'),
    headers: {"content-type": "application/json"},
    body: toJsonConversion(data),
  );

  // 执行传入的自定义逻辑
  if (customLogic != null) {
    customLogic(data);
  }

  return response.statusCode == 200;
}

调用示例

后续新增任何Model和接口都不需要再写重复的请求逻辑,直接调用通用函数即可:

// 调用更新日程接口
bool scheduleResult = await commonUpdate(
  scheduleAPI, 
  scheduleModelInstance,
  customLogic: (data) => print((data as ScheduleModel).arrivalDate)
);

// 调用更新路线接口
bool routeResult = await commonUpdate(routesAPI, routeModelInstance);

补充说明

如果不想定义基类约束,也可以直接用dynamic类型作为入参,但是非常不推荐,这种写法没有编译时类型校验,如果某个Model没有实现toJson方法,只会在运行时报错,排查成本很高。
如果后续需要适配POST/DELETE等其他请求方式,只需要在通用函数中新增请求方法的入参即可,扩展成本极低。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 19:21:01