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

import 'package:dio/dio.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:wow_english/network/basic_configuration.dart';

import '../modes/response_model.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 = BasicConfigurationManager().baseUrl??'';
    options.connectTimeout = const Duration(milliseconds: 1000);
    options.receiveTimeout = const Duration(milliseconds: 1000);
    options.headers['content-type'] = 'application/x-www-form-urlencoded';
    return options;
  }

  Future<void> requestData<T>(
      String path, {
        data,
        HttpMethod method = HttpMethod.post,
        Map<String, dynamic>? queryParameters,
        ProgressCallback? onSendProgress,
        ProgressCallback? onReceiveProgress,
        required Function successCallBack,
        required Function errorCallBack,
      }) async{
    try {
      Map<String, dynamic> headers = <String, dynamic>{};

      if (method == HttpMethod.post) {
        headers['content-type'] = 'application/json';
      }
      Response<dynamic> response;
      response = await _dio.request(
          path,
          data: data??{},
          queryParameters: queryParameters,
          options: Options(method: method.name,headers: headers),
          onSendProgress: onSendProgress,
          onReceiveProgress: onReceiveProgress);
      if (response.statusCode == HttpStatus.ok || response.statusCode == HttpStatus.created) {
        if (kDebugMode) {
          print(response.data);
        }
        final ResponseModel model = ResponseModel.fromJson(response.data);
        if (model.code != 200) {
          errorCallBack(model.msg);
        } else {
          successCallBack(response.data);
        }
      } else {
        errorCallBack('请求失败');
      }
    } on DioError catch(error) {
      EasyLoading.dismiss();
      if (kDebugMode) {
        print(error);
      }
      rethrow;
    }
  }
}