setup method

dynamic setup({
  1. required NetworkHttpConfig config,
})

Setup.

  • config NetworkHttpConfig.

Implementation

setup({required NetworkHttpConfig config}) async {
  _config = config;
  _config.callbacks?.onDioSetup(_dio, true);

  /// Encryptor.
  _encryptor = ec.Encrypter(ec.AES(
    ec.Key.fromUtf8(_config.base.aesKey ?? _kDefaultAesKey),
    mode: ec.AESMode.cbc,
  ));
  _iv = ec.IV.fromUtf8(_config.base.aesIv ?? _kDefaultAesIv);

  /// Internal components.
  _parser = NetworkHttpParser(http: this);
  _downloader = NetworkHttpDownloader(http: this);
  _uploader = NetworkHttpUploader(http: this);
  _request = NetworkHttpRequest(http: this);

  /// Timeout.
  _dio.options.connectTimeout = Duration(
    milliseconds: config.base.connectionTimeoutMs,
  );
  _dio.options.receiveTimeout = Duration(
    milliseconds: config.base.receiveTimeoutMs,
  );

  /// Common headers.
  _dio.interceptors
    ..add(PrettyDioLogger(
      requestHeader: !kReleaseMode,
      requestBody: !kReleaseMode,
      responseBody: !kReleaseMode,
      responseHeader: !kReleaseMode,
      compact: true,
    ))
    ..add(InterceptorsWrapper(onRequest: (options, handler) async {
      await _setupDeviceInfoIfNeeded(options.headers);
      final token = _config.getters?.getUserToken(this) ?? '';
      options.headers[HttpHeaders.authorizationHeader] = token;
      options.headers[_config.keys.requestHeaderSource] = Platform.operatingSystem;
      options.headers[_config.keys.requestHeaderDeviceId] = _deviceId;
      options.headers[_config.keys.requestHeaderDeviceModel] = _deviceModel;
      options.headers[_config.keys.requestHeaderDeviceBrand] = _deviceBrand;
      options.headers[_config.keys.requestHeaderDeviceDisplay] = _deviceDisplay;
      options.headers[_config.keys.requestHeaderDeviceHardware] = _deviceHardware;
      options.headers[_config.keys.requestHeaderLanguage] = _language;
      options.headers[_config.keys.requestHeaderBuildNo] = _buildNo;
      options.headers[_config.keys.requestHeaderVersionName] = _version;
      handler.next(options);
    }, onResponse: (response, handler) {
      handler.next(response);
    }, onError: (exception, handler) {
      handler.next(exception);
    }));

  /// Configuration callback.
  _config.callbacks?.onDioSetup(_dio, false);
}