alroyso 1 year ago
parent
commit
d4455bd45c

+ 4 - 5
lib/app/controller/GlobalController.dart

@@ -11,7 +11,6 @@ import 'package:naiyouwl/app/network/dio_client.dart';
 import 'package:naiyouwl/app/utils/shell.dart';
 import 'package:naiyouwl/app/utils/system_proxy.dart';
 import 'package:naiyouwl/app/utils/utils.dart';
-import 'package:naiyouwl/app/utils/win_console.dart';
 import 'package:proxy_manager/proxy_manager.dart';
 import 'package:shared_preferences/shared_preferences.dart';
 import 'package:tray_manager/tray_manager.dart';
@@ -55,10 +54,10 @@ class GlobalController extends GetxController {
   Future<void> init(BuildContext context) async {
     this.context = context;
     watchExit();
-    if(Platform.isWindows){
-      createConsole();
-      hideConsole();
-    }
+    // if(Platform.isWindows){
+    //   createConsole();
+    //   hideConsole();
+    // }
     await SharedPreferencesUtil().delete("last_successful_url");
     // init plugins
     await controllers.tray.initTray();

+ 2 - 3
lib/app/controller/tray.dart

@@ -4,7 +4,6 @@ import 'package:get/get.dart';
 import 'package:naiyouwl/app/bean/proxie.dart';
 import 'package:naiyouwl/app/controller/controllers.dart';
 import 'package:naiyouwl/app/utils/utils.dart';
-import 'package:naiyouwl/app/utils/win_console.dart';
 import 'package:tray_manager/tray_manager.dart';
 import 'package:url_launcher/url_launcher.dart';
 import 'package:window_manager/window_manager.dart';
@@ -122,10 +121,10 @@ class TrayController extends GetxController with TrayListener {
     isSHow = false;
     if (menuItem.checked == true) {
       isShowConsole.value = true;
-      showConsole();
+      //showConsole();
     } else {
       isShowConsole.value = false;
-      hideConsole();
+     // hideConsole();
     }
   }
   Future<void> handleClickShow(MenuItem menuItem) async {

+ 0 - 48
lib/app/utils/win_console.dart

@@ -1,48 +0,0 @@
-import 'dart:ffi';
-import 'package:ffi/ffi.dart';
-import 'dart:io' show Platform;
-
-final DynamicLibrary user32 = DynamicLibrary.open('user32.dll');
-final DynamicLibrary kernel32 = DynamicLibrary.open('kernel32.dll');
-
-typedef ShowWindowC = Int32 Function(IntPtr hWnd, Int32 nCmdShow);
-typedef ShowWindowDart = int Function(int hWnd, int nCmdShow);
-final ShowWindowDart ShowWindow = user32
-    .lookupFunction<ShowWindowC, ShowWindowDart>('ShowWindow');
-
-typedef GetConsoleWindowC = IntPtr Function();
-typedef GetConsoleWindowDart = int Function();
-final GetConsoleWindowDart GetConsoleWindow = kernel32
-    .lookupFunction<GetConsoleWindowC, GetConsoleWindowDart>('GetConsoleWindow');
-
-typedef AllocConsoleC = Int32 Function();
-typedef AllocConsoleDart = int Function();
-final AllocConsoleDart AllocConsole = kernel32
-    .lookupFunction<AllocConsoleC, AllocConsoleDart>('AllocConsole');
-
-typedef FreeConsoleC = Int32 Function();
-typedef FreeConsoleDart = int Function();
-final FreeConsoleDart FreeConsole = kernel32
-    .lookupFunction<FreeConsoleC, FreeConsoleDart>('FreeConsole');
-
-const int SW_HIDE = 0;
-const int SW_SHOW = 5;
-
-void createConsole() {
-  AllocConsole();
-  // Now the console is created, you can show or hide it using the ShowWindow function
-}
-
-void hideConsole() {
-  var consoleWnd = GetConsoleWindow();
-  ShowWindow(consoleWnd, SW_HIDE);
-}
-
-void showConsole() {
-  var consoleWnd = GetConsoleWindow();
-  ShowWindow(consoleWnd, SW_SHOW);
-}
-
-void freeConsole() {
-  FreeConsole();
-}

+ 41 - 1
windows/runner/main.cpp

@@ -1,12 +1,52 @@
 #include <flutter/dart_project.h>
 #include <flutter/flutter_view_controller.h>
 #include <windows.h>
-
+#include <flutter/method_channel.h>
+#include <flutter/plugin_registrar_windows.h>
 #include "flutter_window.h"
 #include "utils.h"
 #include <protocol_handler/protocol_handler_plugin.h>
+
+// 展示控制台
+void ShowConsole() {
+  HWND hWnd = ::GetConsoleWindow();
+  if (hWnd != NULL) {
+    ::ShowWindow(hWnd, SW_SHOW);
+  }
+}
+
+// 隐藏控制台
+void HideConsole() {
+  HWND hWnd = ::GetConsoleWindow();
+  if (hWnd != NULL) {
+    ::ShowWindow(hWnd, SW_HIDE);
+  }
+}
+// 一个例子:展示如何注册处理函数来响应Dart的调用。
+void RegisterWithFlutter(flutter::PluginRegistrarWindows *registrar) {
+  auto channel =
+          std::make_unique<flutter::MethodChannel<flutter::EncodableValue>>(
+                  registrar->messenger(), "com.naiyouwl.native_code",
+                          &flutter::StandardMethodCodec::GetInstance());
+
+  channel->SetMethodCallHandler(
+          [](const flutter::MethodCall<flutter::EncodableValue>& call,
+             std::unique_ptr<flutter::MethodResult<flutter::EncodableValue>> result) {
+              if (call.method_name().compare("showConsole") == 0) {
+                ShowConsole();
+                result->Success(flutter::EncodableValue(true));
+              } else if (call.method_name().compare("hideConsole") == 0) {
+                HideConsole();
+                result->Success(flutter::EncodableValue(true));
+              } else {
+                result->NotImplemented();
+              }
+          });
+}
 int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,
                       _In_ wchar_t *command_line, _In_ int show_command) {
+// 注册Flutter插件
+  RegisterPlugins(&flutter_controller->engine());
 
   HWND hwnd = ::FindWindow(L"FLUTTER_RUNNER_WIN32_WINDOW", L"naiyouwl");
   if (hwnd != NULL) {