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. T fromJson(
    1. dynamic json
    )?,
  7. bool showLoading = false,
  8. CancelToken? cancelToken,
  9. void onSendProgress(
    1. int,
    2. int
    )?,
  10. void onReceiveProgress(
    1. int,
    2. int
    )?,
})

Implementation

Future<T?> request<T>(
  String path, {
  String? baseUrl,
  HttpMethod method = HttpMethod.get,
  Options? options,
  dynamic data,
  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();

    // 处理 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: 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 data.map((e) => fromJson(e)).toList() as T;
      }
    }
    return response.data;
  } catch (e) {
    throw e.toString();
  } finally {
    if (showLoading) {
      DialogUtil.hideLoading();
    }
  }
}