request<T> method
Future<T?>
request<
T>( - String path, {
- String? baseUrl,
- HttpMethod method = HttpMethod.get,
- Options? options,
- dynamic data,
- Map<String, dynamic>? query,
- T fromJson(
- dynamic json
)?,
- bool showLoading = false,
- CancelToken? cancelToken,
- void onSendProgress(
- int,
- int
)?,
- void onReceiveProgress(
- int,
- int
)?,
})
Implementation
Future<T?> request<T>(
String path, {
String? baseUrl,
HttpMethod method = HttpMethod.get,
Options? options,
dynamic data,
Map<String, dynamic>? query,
T Function(dynamic json)? fromJson,
bool showLoading = false,
CancelToken? cancelToken,
void Function(int, int)? onSendProgress,
void Function(int, int)? onReceiveProgress,
}) async {
try {
options ??= Options();
options.method = method.name.toUpperCase();
// 动态设置请求头
final commonHeaders = config.getCommonHeaders;
if (commonHeaders.isNotEmpty) {
options.headers = {...?options.headers, ...commonHeaders};
}
// 处理 GET 请求参数(向后兼容)
final isGetMethod = method == HttpMethod.get;
final queryParams = isGetMethod ? _convertParams(data) : null;
if (showLoading) {
DialogUtil.showLoading();
}
Response response = await _dio.request(
_buildUrl(path, baseUrl),
data: data,
queryParameters: query ?? queryParams,
options: options,
cancelToken: cancelToken,
onSendProgress: onSendProgress,
onReceiveProgress: onReceiveProgress,
);
if (fromJson != null) {
if (response.data is Map<String, dynamic>) {
return fromJson(response.data);
} else if (response.data is List) {
return response.data.map((e) => fromJson(e)).toList() as T;
}
}
return response.data;
} on DioException catch (e) {
throw _handleDioException(e);
} catch (e) {
throw 'Unexpected error: ${e.toString()}';
} finally {
if (showLoading) {
DialogUtil.hideLoading();
}
}
}