class ApiResponse { 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 json, T Function(dynamic)? dataFromJson, // 可为空,有些接口 data 是 null ) { final dataJson = json['data']; final T? parsedData = dataJson != null && dataFromJson != null ? dataFromJson(dataJson) : null; return ApiResponse( 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( data: data, errorMsg: errorMsg ?? 'success', errorCode: errorCode, description: description ?? 'success', ); } // 失败工厂构造 factory ApiResponse.error( String errorMsg, { int? errorCode, T? data, String? description, }) { return ApiResponse( 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)'; } }