onInit method

  1. @override
void onInit()
override

Called immediately after the widget is allocated in memory. You might use this to initialize something for the controller.

Implementation

@override
void onInit() {
  super.onInit();

  // BaseOptions、Options、RequestOptions 都可以配置参数,优先级别依次递增,且可以根据优先级别覆盖参数
  BaseOptions options = BaseOptions(
      connectTimeout: connectTimeout ?? CONNECT_TIMEOUT,
      // 响应流上前后两次接受到数据的间隔,单位为毫秒。
      receiveTimeout: receiveTimeout ?? RECEIVE_TIMEOUT,
      contentType: 'application/json; charset=utf-8',
      responseType: ResponseType.json,
      headers: {});

  dio = Dio(options);

  dio.interceptors.add(MaskInterceptor());
  dio.interceptors.add(ErrorInterceptor());

  if (interceptors != null && interceptors!.isNotEmpty) {
    dio.interceptors.addAll(interceptors!);
  }

  // 添加拦截器
  dio.interceptors.add(LogInterceptor(responseBody: true));

  // 加内存缓存
  // dio.interceptors.add(NetCacheInterceptor());
  if (retryEnable) {
    dio.interceptors.add(
      RetryOnConnectionChangeInterceptor(
        requestRetrier: DioConnectivityRequestRetrier(
          dio: dio,
          connectivity: Connectivity(),
        ),
      ),
    );
  }

  // 在调试模式下需要抓包调试,所以我们使用代理,并禁用HTTPS证书校验
  if (proxyConfig?[proxyEnable] ?? false) {
    (dio.httpClientAdapter as IOHttpClientAdapter).onHttpClientCreate =
        (client) {
      client.findProxy = (uri) {
        return "PROXY ${proxyConfig?[proxyIp]}:${proxyConfig?[proxyPort]}";
      };
      //代理工具会提供一个抓包的自签名证书,会通不过证书校验,所以我们禁用证书校验
      client.badCertificateCallback =
          (X509Certificate cert, String host, int port) => true;
    };
  }
}