alroyso 1 year ago
parent
commit
d99c91bd97

+ 23 - 10
lib/app/modules/home/controllers/home_controller.dart

@@ -3,8 +3,10 @@ import 'dart:async';
 import 'dart:io';
 
 import 'package:dart_json_mapper/dart_json_mapper.dart';
+import 'package:flutter/cupertino.dart';
 import 'package:get/get.dart';
 import 'package:naiyouwl/app/common/constants.dart';
+import 'package:naiyouwl/app/component/dialogs.dart';
 import 'package:naiyouwl/app/controller/GlobalController.dart';
 import 'package:naiyouwl/app/controller/controllers.dart';
 import 'package:naiyouwl/app/controller/service.dart';
@@ -42,6 +44,7 @@ class HomeController extends GetxController {
   var UsersysConfig = SysConfig().obs;
   var connectStatus = Rx<ConnectionStatus>(ConnectionStatus.disconnected);
   var nodeModes = <NodeMode>[];
+  bool get isRunning => connectStatus.value == ConnectionStatus.stopped && controllers.global.allowStatusUpdate;
   late final GlobalController globalController = controllers.global;
   StreamSubscription<RunningState>? _statusSubscription;
   final Map<ImageType, String> imageMap = {
@@ -153,21 +156,31 @@ class HomeController extends GetxController {
 
   }
 
+  dynamic showError(BuildContext context) async {
+    await showNormalDialog(context,
+        title: '提示',
+        content: errorMsg.value,
+        enterText: '确认', cancelText: '',
+        );
+  }
+
+
+
+  Future<void> stopVpn() async {
+    controllers.global.allowStatusUpdate = false;
+    await controllers.config.setBreakConnections(true);
+    // // 停止服务
+    await controllers.service.stopClashCore();
+    await controllers.global.systemProxySwitch(false);
+    updateStatus(ConnectionStatus.disconnected);
+  }
   Future<void> fetchAuthUser() async {
     try {
-      if (connectStatus.value == ConnectionStatus.stopped) {
-        controllers.global.allowStatusUpdate = false;
-        await controllers.config.setBreakConnections(true);
-        // // 停止服务
-        await controllers.service.stopClashCore();
-        await controllers.global.systemProxySwitch(false);
-        updateStatus(ConnectionStatus.disconnected);
-        return;
-      }
+
       final ret  = await ApiService().fetchAuthUser(KAuthUser);
       controllers.global.selectedNode.value = ret;
       controllers.global.selectNode(ret);
-      handleButtonClick();
+      await handleButtonClick();
     } catch (e) {
       errorMsg.value = e.toString();
     } finally {

+ 13 - 5
lib/app/modules/home/views/home_view.dart

@@ -5,6 +5,7 @@ import 'package:flutter/material.dart';
 
 import 'package:get/get.dart';
 import 'package:naiyouwl/app/component/button_select.dart';
+import 'package:naiyouwl/app/component/connection_status.dart';
 import 'package:naiyouwl/app/component/connection_widget.dart';
 import 'package:naiyouwl/app/component/sys_app_bar.dart';
 import 'package:naiyouwl/app/controller/controllers.dart';
@@ -46,11 +47,12 @@ class HomeView extends GetView<HomeController> {
 
           body: Obx(() {
             if (controller.errorMsg.isNotEmpty) {
-              WidgetsBinding.instance.addPostFrameCallback((_) {
-                ScaffoldMessenger.of(context).showSnackBar(
-                    SnackBar(content: Text(controller.errorMsg.value))
-                );
-              });
+              // WidgetsBinding.instance.addPostFrameCallback((_) {
+              //   ScaffoldMessenger.of(context).showSnackBar(
+              //       SnackBar(content: Text(controller.errorMsg.value))
+              //   );
+              // });
+              controller.showError(context);
             }
 
             final disabled = !controllers.service.isRunning;
@@ -108,7 +110,13 @@ class HomeView extends GetView<HomeController> {
                 Obx(() {
                   return ConnectionWidget(
                     status: controller.connectStatus.value, onTap: () {
+                      if(controller.isRunning){
+                        controller.stopVpn();
+                      } else
+                        {
                           controller.fetchAuthUser();
+                        }
+
                   },);
                 }),
                 Padding(

+ 6 - 0
macos/Podfile.lock

@@ -13,6 +13,8 @@ PODS:
   - path_provider_foundation (0.0.1):
     - Flutter
     - FlutterMacOS
+  - protocol_handler (0.0.1):
+    - FlutterMacOS
   - proxy_manager (0.0.1):
     - FlutterMacOS
   - ReachabilitySwift (5.0.0)
@@ -37,6 +39,7 @@ DEPENDENCIES:
   - flutter_secure_storage_macos (from `Flutter/ephemeral/.symlinks/plugins/flutter_secure_storage_macos/macos`)
   - FlutterMacOS (from `Flutter/ephemeral`)
   - path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`)
+  - protocol_handler (from `Flutter/ephemeral/.symlinks/plugins/protocol_handler/macos`)
   - proxy_manager (from `Flutter/ephemeral/.symlinks/plugins/proxy_manager/macos`)
   - screen_retriever (from `Flutter/ephemeral/.symlinks/plugins/screen_retriever/macos`)
   - shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin`)
@@ -61,6 +64,8 @@ EXTERNAL SOURCES:
     :path: Flutter/ephemeral
   path_provider_foundation:
     :path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin
+  protocol_handler:
+    :path: Flutter/ephemeral/.symlinks/plugins/protocol_handler/macos
   proxy_manager:
     :path: Flutter/ephemeral/.symlinks/plugins/proxy_manager/macos
   screen_retriever:
@@ -83,6 +88,7 @@ SPEC CHECKSUMS:
   FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24
   FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
   path_provider_foundation: 29f094ae23ebbca9d3d0cec13889cd9060c0e943
+  protocol_handler: 587e1caf6c0b92ce351ab14081968dae49cb8cc6
   proxy_manager: 542f2521a9ade938bfdd8a2ff566d95515fa7f2c
   ReachabilitySwift: 985039c6f7b23a1da463388634119492ff86c825
   screen_retriever: 59634572a57080243dd1bf715e55b6c54f241a38