diff --git a/lib/clients/dio_http.dart b/lib/clients/dio_http.dart index f901cd4..cbcdd03 100644 --- a/lib/clients/dio_http.dart +++ b/lib/clients/dio_http.dart @@ -1,7 +1,10 @@ import 'dart:io'; +import 'package:dio/browser.dart'; import 'package:dio/dio.dart'; +import 'package:dio/io.dart'; import 'package:enum_to_string/enum_to_string.dart'; +import 'package:flutter/foundation.dart'; import 'package:robust_http/clients/base_http.dart'; import 'package:robust_http/exceptions.dart'; import 'package:robust_http/file_info.dart'; @@ -44,6 +47,20 @@ class DioHttp extends BaseHttp { } _dio = new Dio(baseOptions); + HttpClientAdapter adapter; + if (kIsWeb) { + adapter = BrowserHttpClientAdapter(); + } else { + final client = HttpClient() + ..idleTimeout = Duration(seconds: options["idleTimeout"] ?? 3); + + if (options["maxConnectionsPerHost"] != null) { + client.maxConnectionsPerHost = options["maxConnectionsPerHost"]; + } + adapter = IOHttpClientAdapter() + ..createHttpClient = () => client; + } + _dio.httpClientAdapter = adapter; var logLevel = options['logLevel']; if (logLevel != 'none') { _dio.interceptors.add(LoggerInterceptor(logLevel == 'debug')); @@ -54,10 +71,10 @@ class DioHttp extends BaseHttp { Future handleException(error) async { if (await validateConnectionError( validateNetwork: _validateNetworkOnError)) { - if (error is DioError) { - if (error.type == DioErrorType.connectionTimeout || - error.type == DioErrorType.sendTimeout || - error.type == DioErrorType.receiveTimeout) { + if (error is DioException) { + if (error.type == DioExceptionType.connectionTimeout || + error.type == DioExceptionType.sendTimeout || + error.type == DioExceptionType.receiveTimeout) { throw NetworkTimeoutException( 'Request ${error.requestOptions.path} timeout [${error.response?.statusCode}] ${error.message}'); } else if (error.response != null) { diff --git a/lib/robust_log.dart b/lib/robust_log.dart index 8b14089..a1912be 100644 --- a/lib/robust_log.dart +++ b/lib/robust_log.dart @@ -41,7 +41,7 @@ class LoggerInterceptor extends Interceptor { @override void onError( - DioError err, + DioException err, ErrorInterceptorHandler handler, ) async { logMessages.add('*** DioError ***:'); diff --git a/pubspec.yaml b/pubspec.yaml index ea9c069..45cdf1b 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -10,10 +10,10 @@ dependencies: flutter: sdk: flutter intl: ^0.18.1 - connectivity_plus: ^4.0.1 - logger: ^1.3.0 - dio: ^5.1.2 - http: ^1.0.0 + connectivity_plus: ^5.0.2 + logger: ^2.0.2+1 + dio: ^5.4.0 + http: ^1.1.2 enum_to_string: ^2.0.1 singleton: ^0.0.3-nullsafety internet_connection_checker: ^1.0.0+1