network_manager.dart 1.42 KB
import 'dart:io';

import 'package:dio/dio.dart';

enum HttpMethod {
  get,
  put,
  post,
  head,
  patch,
  delete,
}

class DioUtil {
  static final Dio _dio = getDefDio();

  static Dio getDefDio() {
    Dio dio = Dio();
    dio.options = getDefOptions();
    return dio;
  }

  static BaseOptions getDefOptions() {
    final BaseOptions options = BaseOptions();
    options.baseUrl = '';
    options.connectTimeout = const Duration(milliseconds: 1000);
    options.receiveTimeout = const Duration(milliseconds: 1000);
    return options;
  }

  Future<void> requestData<T>(
      String path, {
        data,
        HttpMethod method = HttpMethod.get,
        Map<String, dynamic>? queryParameters,
        ProgressCallback? onSendProgress,
        ProgressCallback? onReceiveProgress,
        required Function successCallBack,
        required Function errorCallBack,
      }) async{
    try {
      Response<dynamic> response;
      response = await _dio.request(
          path,
          data: data??{},
          queryParameters: queryParameters,
          options: Options(method: method.name),
          onSendProgress: onSendProgress,
          onReceiveProgress: onReceiveProgress);
      if (response.statusCode == HttpStatus.ok ||
          response.statusCode == HttpStatus.created) {
        successCallBack(response.data);
      } else {
        errorCallBack('请求失败');
      }
    } on Error {
      rethrow;
    }
  }
}