alroyso 1 year ago
parent
commit
8b905c9dd8
2 changed files with 15 additions and 1 deletions
  1. 9 0
      lib/app/network/api_service.dart
  2. 6 1
      lib/app/network/dio_client.dart

+ 9 - 0
lib/app/network/api_service.dart

@@ -1,5 +1,6 @@
 import 'package:dart_json_mapper/dart_json_mapper.dart';
 import 'package:dio/dio.dart';
+import 'package:naiyouwl/app/common/SharedPreferencesUtil.dart';
 import 'package:naiyouwl/app/data/model/LoginMode.dart';
 import 'package:naiyouwl/app/data/model/NodeMode.dart';
 import 'package:naiyouwl/app/data/model/UpdateVersion.dart';
@@ -16,6 +17,12 @@ class ApiService {
 
   ApiService._internal();
 
+  Future<void> init() async {
+    String? lastSuccessfulUrl = await SharedPreferencesUtil().getString("last_successful_url");
+    if (lastSuccessfulUrl != null && lastSuccessfulUrl.isNotEmpty) {
+      _dioClient.updateBaseUrl(lastSuccessfulUrl);
+    }
+  }
 
   Future<SysConfig> fetchSysConfig(String path) async {
     final  data = await _requestWrapper(() => _dioClient.get(path));
@@ -144,6 +151,8 @@ class ApiService {
 
   Future<dynamic> _requestWrapper(Future<dynamic> Function() apiCall) async {
     try {
+      await ApiService().init();
+
       final response = await apiCall();
 
       // 如果你有返回的HTTP状态码, 检查它们

+ 6 - 1
lib/app/network/dio_client.dart

@@ -18,6 +18,7 @@ class DioClient {
   final Logger _logger = Logger();
 
   DioClient._internal() {
+
     _dio = Dio(BaseOptions(
       baseUrl: 'https://api.androidrj01.top', // 你的API地址
       connectTimeout: 5000,
@@ -47,6 +48,7 @@ class DioClient {
         final responseData = response.data as Map<String, dynamic>;
         if (responseData['ret'] == 1) {
           customInterceptor.resetRetryCount();  // 当请求成功时重置重试计数器
+
           handler.next(
             Response<dynamic>(
               data: responseData['data'],
@@ -68,7 +70,9 @@ class DioClient {
 
 
   }
-
+  void updateBaseUrl(String newBaseUrl) {
+    _dio.options.baseUrl = newBaseUrl;
+  }
   Dio get dio => _dio;
 }
 
@@ -123,6 +127,7 @@ class CustomInterceptors extends Interceptor {
         try {
 
           final Response response = await _dio.fetch(err.requestOptions);
+          await SharedPreferencesUtil().setString("last_successful_url", _dio.options.baseUrl);
           return handler.resolve(response);
         } catch (e) {
           if (e is DioError) {