starwork_flutter/lib/api/api_response.dart

70 lines
1.6 KiB
Dart

class ApiResponse<T> {
final String? description;
final T? data;
final String? errorMsg;
final int? errorCode;
const ApiResponse({
this.description,
this.data,
this.errorMsg,
this.errorCode,
});
// ✅ 新增:从 JSON 创建 ApiResponse
factory ApiResponse.fromJson(
Map<String, dynamic> json,
T Function(dynamic)? dataFromJson, // 可为空,有些接口 data 是 null
) {
final dataJson = json['data'];
final T? parsedData = dataJson != null && dataFromJson != null ? dataFromJson(dataJson) : null;
return ApiResponse<T>(
errorCode: json['errorCode'] == null ? json['errcode'] : json['errorCode'],
errorMsg: json['errorMsg'] == null ? json['errmsg'] : json['errorMsg'],
description: json['description'],
data: parsedData,
);
}
// 成功工厂构造
factory ApiResponse.success(
T data, {
String? errorMsg,
int? errorCode,
String? description,
}) {
return ApiResponse<T>(
data: data,
errorMsg: errorMsg ?? 'success',
errorCode: errorCode,
description: description ?? 'success',
);
}
// 失败工厂构造
factory ApiResponse.error(
String errorMsg, {
int? errorCode,
T? data,
String? description,
}) {
return ApiResponse<T>(
description: description,
errorMsg: errorMsg,
errorCode: errorCode,
data: data,
);
}
bool get isSuccess {
return errorCode == 0;
}
@override
String toString() {
return 'ApiResponse(description: $description, errorMsg: $errorMsg, data: $data, errorCode: $errorCode)';
}
}