diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 0f9a999b..e61ad546 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -22,6 +22,9 @@ + + + { final controlMode = status.controlMode == '3' ? '远程模式' : '本地模式'; - // final c = getPing('1.95.137.212'); // ⚠️ 替换为你的服务器 IP + final c = getNetworkDelay(); // emit(state.copyWith( runningStatusModel: state.runningStatusModel.copyWith( voltage: voltage.toString(), // 更新电压 @@ -76,7 +78,7 @@ class RemoteControlCubit extends Cubit { controlMode: controlMode, // 更新控制模式 ), battery: int.tryParse(battery) ?? 0, - //ping: c, // 这里直接使用异步返回的数值 + ping: await c, // 这里直接使用异步返回的数值 )); @@ -121,7 +123,7 @@ class RemoteControlCubit extends Cubit { // } // }); // } - void _initPacketListener() { + Future _initPacketListener() async { print('>>> [RemoteControl] begin 初始化 0x12 监听器'); _kickOutSub?.cancel(); // 防止重复监听 @@ -191,7 +193,10 @@ class RemoteControlCubit extends Cubit { print('>>> [RemoteControl] ❌ 解析失败:$e'); } }); - + final c = getNetworkDelay(); + emit(state.copyWith( + ping: await c, // 这里直接使用异步返回的数值 + )); print('>>> [RemoteControl] ✅ 0x12 监听器已建立完成'); } @@ -362,30 +367,23 @@ class RemoteControlCubit extends Cubit { emit(state.copyWith(topRightIsExpanded: !state.topRightIsExpanded)); } - int getPing(String host) { - print('>>> [RemoteControl] 📡 开始 ping $host...'); + Future getNetworkDelay() async { + try { + // 直接 Ping 你的服务器 IP + final ping = Ping('1.95.137.212', count: 1, timeout: 1); - // 后台异步获取,不阻塞 - platform.invokeMethod('ping', { - 'host': host, - 'count': 1, - 'timeout': 2, - }).then((result) { - final success = result['success'] as bool? ?? false; - final delay = (result['delayMs'] as num?)?.toInt() ?? 100; - _currentPing = success ? delay.clamp(0, 100) : 100; - print('📶 [Ping 结果] $host - $_currentPing ms'); + // 等待一次结果 + final data = await ping.stream.first; - // 获取到新值后,再次 emit 更新 state - if (!isClosed) { - emit(state.copyWith(ping: _currentPing)); + if (data.response != null && data.response!.time != null) { + // 返回和 cmd 一样的毫秒值 + return data.response!.time!.inMilliseconds; + } else { + return 9999; } - }).catchError((e) { - print('⚠️ [Ping 错误] $e'); - _currentPing = 100; - }); - - return _currentPing; // 立即返回当前值 + } catch (e) { + return 9999; + } } diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index 279b8b73..79018f52 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -5,6 +5,7 @@ import FlutterMacOS import Foundation +import connectivity_plus import device_info_plus import file_selector_macos import flutter_webrtc @@ -18,6 +19,7 @@ import url_launcher_macos import webview_flutter_wkwebview func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { + ConnectivityPlusPlugin.register(with: registry.registrar(forPlugin: "ConnectivityPlusPlugin")) DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin")) FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin")) FlutterWebRTCPlugin.register(with: registry.registrar(forPlugin: "FlutterWebRTCPlugin")) diff --git a/pubspec.lock b/pubspec.lock index 9de20822..305cdd2f 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -168,6 +168,22 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "1.19.1" + connectivity_plus: + dependency: "direct dev" + description: + name: connectivity_plus + sha256: b5e72753cf63becce2c61fd04dfe0f1c430cc5278b53a1342dc5ad839eab29ec + url: "https://pub.flutter-io.cn" + source: hosted + version: "6.1.5" + connectivity_plus_platform_interface: + dependency: transitive + description: + name: connectivity_plus_platform_interface + sha256: "3c09627c536d22fd24691a905cdd8b14520de69da52c7a97499c8be5284a32ed" + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.1.0" convert: dependency: transitive description: @@ -200,6 +216,14 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "1.0.9" + dart_ping: + dependency: "direct dev" + description: + name: dart_ping + sha256: "2f5418d0a5c64e53486caaac78677b25725b1e13c33c5be834ce874ea18bd24f" + url: "https://pub.flutter-io.cn" + source: hosted + version: "9.0.1" dart_style: dependency: transitive description: @@ -224,6 +248,14 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "1.2.0" + dbus: + dependency: transitive + description: + name: dbus + sha256: d0c98dcd4f5169878b6cf8f6e0a52403a9dff371a3e2f019697accbf6f44a270 + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.7.12" device_info_plus: dependency: "direct main" description: @@ -847,6 +879,14 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "1.0.0" + nm: + dependency: transitive + description: + name: nm + sha256: "2c9aae4127bdc8993206464fcc063611e0e36e72018696cd9631023a31b24254" + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.5.0" objective_c: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 763c287b..28266a75 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -138,6 +138,8 @@ dev_dependencies: # rules and activating additional ones. flutter_lints: ^6.0.0 + dart_ping: ^9.0.0 + connectivity_plus: ^6.0.3 # 自动生成 ".g.dart" 文件 # 只有dev运行命令时才需要,用户运行 App 时不需要 isar_community_generator: ^3.3.0 diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc index bf0b1810..3d39b7c0 100644 --- a/windows/flutter/generated_plugin_registrant.cc +++ b/windows/flutter/generated_plugin_registrant.cc @@ -6,6 +6,7 @@ #include "generated_plugin_registrant.h" +#include #include #include #include @@ -15,6 +16,8 @@ #include void RegisterPlugins(flutter::PluginRegistry* registry) { + ConnectivityPlusWindowsPluginRegisterWithRegistrar( + registry->GetRegistrarForPlugin("ConnectivityPlusWindowsPlugin")); FileSelectorWindowsRegisterWithRegistrar( registry->GetRegistrarForPlugin("FileSelectorWindows")); FlutterWebRTCPluginRegisterWithRegistrar( diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake index b63b2b8a..1caa5bbb 100644 --- a/windows/flutter/generated_plugins.cmake +++ b/windows/flutter/generated_plugins.cmake @@ -3,6 +3,7 @@ # list(APPEND FLUTTER_PLUGIN_LIST + connectivity_plus file_selector_windows flutter_webrtc geolocator_windows