/// API响应模型基类 class BaseResponse { final int code; final String message; final T? data; BaseResponse({ required this.code, required this.message, this.data, }); factory BaseResponse.fromJson(Map json, T Function(dynamic)? fromJsonT) { return BaseResponse( code: json['code'] ?? 0, message: json['message'] ?? '', data: fromJsonT != null && json.containsKey('data') && json['data'] != null ? fromJsonT(json['data']) : null, ); } Map toJson(Object? Function(T?)? toJsonT) { final Map data = {}; data['code'] = code; data['message'] = message; if (this.data != null && toJsonT != null) { data['data'] = toJsonT(this.data); } return data; } /// 是否请求成功 bool get isSuccess => code == 0; @override String toString() { return 'BaseResponse{code: $code, message: $message, data: $data}'; } } /// 分页响应模型 class PaginatedResponse { final List list; final int total; final int page; final int pageSize; final bool hasMore; PaginatedResponse({ required this.list, required this.total, required this.page, required this.pageSize, this.hasMore = false, }); factory PaginatedResponse.fromJson( Map json, T Function(dynamic) fromJsonT, ) { final list = []; if (json['list'] != null && json['list'] is List) { for (final item in json['list']) { list.add(fromJsonT(item)); } } return PaginatedResponse( list: list, total: json['total'] ?? 0, page: json['page'] ?? 1, pageSize: json['pageSize'] ?? 10, hasMore: json['hasMore'] ?? false, ); } Map toJson(Object Function(T) toJsonT) { return { 'records': list.map((e) => toJsonT(e)).toList(), 'total': total, 'page': page, 'pageSize': pageSize, 'hasMore': hasMore, }; } @override String toString() { return 'PaginatedResponse{list: $list, total: $total, page: $page, pageSize: $pageSize, hasMore: $hasMore}'; } }