From c3b28c7034c7c33d537e8db8a6f03e68b1c98ed0 Mon Sep 17 00:00:00 2001 From: Li Wei Date: Mon, 3 Jul 2023 18:52:17 +0800 Subject: [PATCH] fix: dio timeout don't throw exception (#133) --- ui/flutter/lib/api/api.dart | 11 +++++++++-- ui/flutter/pubspec.lock | 4 ++-- ui/flutter/pubspec.yaml | 2 +- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/ui/flutter/lib/api/api.dart b/ui/flutter/lib/api/api.dart index 421d7986..8051bfe0 100644 --- a/ui/flutter/lib/api/api.dart +++ b/ui/flutter/lib/api/api.dart @@ -34,6 +34,7 @@ class _Client { } dio.options.baseUrl = baseUrl; dio.options.contentType = Headers.jsonContentType; + dio.options.sendTimeout = const Duration(seconds: 5); dio.options.connectTimeout = const Duration(seconds: 5); dio.options.receiveTimeout = const Duration(seconds: 60); dio.interceptors.add(InterceptorsWrapper(onRequest: (options, handler) { @@ -46,7 +47,8 @@ class _Client { _instance!.dio = dio; if (isUnixSocket) { (_instance!.dio.httpClientAdapter as IOHttpClientAdapter) - .onHttpClientCreate = (client) { + .createHttpClient = () { + final client = HttpClient(); client.connectionFactory = (Uri uri, String? proxyHost, int? proxyPort) { return Socket.startConnect( @@ -79,7 +81,12 @@ Future _parse( } else { throw Exception(result); } - } on DioError catch (e) { + } on DioException catch (e) { + if (e.type == DioExceptionType.sendTimeout || + e.type == DioExceptionType.receiveTimeout || + e.type == DioExceptionType.connectionTimeout) { + throw Exception(Result(code: 1000, msg: "request timeout")); + } throw Exception(Result(code: 1000, msg: e.message)); } } diff --git a/ui/flutter/pubspec.lock b/ui/flutter/pubspec.lock index ed31406f..bec92c0e 100644 --- a/ui/flutter/pubspec.lock +++ b/ui/flutter/pubspec.lock @@ -237,10 +237,10 @@ packages: dependency: "direct main" description: name: dio - sha256: "0894a098594263fe1caaba3520e3016d8a855caeb010a882273189cca10f11e9" + sha256: a9d76e72985d7087eb7c5e7903224ae52b337131518d127c554b9405936752b8 url: "https://pub.flutter-io.cn" source: hosted - version: "5.1.1" + version: "5.2.1+1" fake_async: dependency: transitive description: diff --git a/ui/flutter/pubspec.yaml b/ui/flutter/pubspec.yaml index c562e262..9cd9c19b 100644 --- a/ui/flutter/pubspec.yaml +++ b/ui/flutter/pubspec.yaml @@ -40,7 +40,7 @@ dependencies: styled_widget: ^0.4.0+3 context_menus: ^1.0.2 json_annotation: ^4.6.0 - dio: ^5.1.1 + dio: ^5.2.1 path_provider: ^2.0.11 file_picker: ^5.2.5 macos_secure_bookmarks: ^0.2.1