request<T> method

Future<T?> request<T>(
  1. String path, {
  2. String? baseUrl,
  3. HttpMethod method = HttpMethod.get,
  4. Options? options,
  5. dynamic data,
  6. Map<String, dynamic>? query,
  7. T fromJson(
    1. dynamic json
    )?,
  8. bool showLoading = false,
  9. CancelToken? cancelToken,
  10. void onSendProgress(
    1. int,
    2. int
    )?,
  11. void onReceiveProgress(
    1. int,
    2. 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();
    }
  }
}