From f2891ff2f9c2a9119896bf43a192abe6053f4dcb Mon Sep 17 00:00:00 2001 From: wangjia <809946525@qq.com> Date: Mon, 29 Jun 2026 19:15:39 +0800 Subject: [PATCH] =?UTF-8?q?fix(client):=20=E8=87=AA=E5=8A=A8=E8=BF=9E?= =?UTF-8?q?=E6=8E=A5=E9=97=A8=E6=8E=A7=E6=94=B9=E5=88=A4=E7=94=9F=E6=95=88?= =?UTF-8?q?=E8=8A=82=E7=82=B9=E5=B0=B1=E7=BB=AA=20+=20=5Fconnect=20?= =?UTF-8?q?=E8=AF=8A=E6=96=AD=E6=97=A5=E5=BF=97(1.0.23)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 自动连接已正确触发,但 _connect 撞 node.uuid.isEmpty 报「节点尚未就绪」:门控用的是 nodes.any(uuid),而 _connect 用 effectiveNode。改门控直接判 effectiveNode.uuid 非空(与 _connect 同一判据)。_connect 加一行日志记录 node/uuid/selected/nodes 便于确认。 Co-Authored-By: Claude Opus 4.8 --- client/lib/main.dart | 9 +++++---- client/lib/state/connection_provider.dart | 3 +++ client/pubspec.yaml | 2 +- client/windows/installer/pangolin.iss | 2 +- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/client/lib/main.dart b/client/lib/main.dart index c56bcd5..7316a6d 100644 --- a/client/lib/main.dart +++ b/client/lib/main.dart @@ -135,14 +135,15 @@ class _RootFlowState extends ConsumerState { void tryGo() { if (decided) return; final settings = ref.read(settingsProvider); - final nodes = ref.read(nodesProvider).valueOrNull ?? const []; - final nodesReady = nodes.any((n) => n.uuid.isNotEmpty); - if (!settings.loaded || !nodesReady) return; // 等两者都就绪 + // 直接判 _connect 实际会用的「生效节点」是否就绪(uuid 非空),而非「列表里有任一就绪节点」—— + // 否则可能在 effectiveNode 尚是占位/未就绪时就触发,_connect 报「节点尚未就绪」。 + final node = ref.read(effectiveNodeProvider); + if (!settings.loaded || node.uuid.isEmpty) return; decided = true; nodeSub?.close(); settingsSub?.close(); final phase = ref.read(connectionProvider).phase; - logLine('AutoConnect', 'ready: autoConnect=${settings.autoConnect} phase=$phase nodes=${nodes.length}'); + logLine('AutoConnect', 'ready: autoConnect=${settings.autoConnect} phase=$phase node=${node.code} uuid=${node.uuid.isEmpty ? "EMPTY" : "ok"}'); if (settings.autoConnect && phase == VpnPhase.off) { logLine('AutoConnect', 'triggering connect'); ref.read(connectionProvider.notifier).toggle(); diff --git a/client/lib/state/connection_provider.dart b/client/lib/state/connection_provider.dart index 3cb2a65..bab0dac 100644 --- a/client/lib/state/connection_provider.dart +++ b/client/lib/state/connection_provider.dart @@ -10,6 +10,7 @@ import 'dart:io'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import '../bridge/log.dart'; import '../bridge/vpn_bridge.dart'; import '../bridge/vpn_bridge_provider.dart'; import '../l10n/app_text.dart'; @@ -138,6 +139,8 @@ class ConnectionController extends StateNotifier { final node = _ref.read(effectiveNodeProvider); final zh = _ref.read(localeProvider) == AppLang.zh; + logLine('Connect', '_connect node=${node.code} uuid=${node.uuid.isEmpty ? "EMPTY" : "ok"} ' + 'selected=${_ref.read(selectedNodeCodeProvider)} nodes=${(_ref.read(nodesProvider).valueOrNull ?? const []).length}'); // 节点未就绪(列表加载中/为空):不连接,提示用户。 if (node.uuid.isEmpty) { diff --git a/client/pubspec.yaml b/client/pubspec.yaml index 4e69bfa..c8147ad 100644 --- a/client/pubspec.yaml +++ b/client/pubspec.yaml @@ -1,7 +1,7 @@ name: pangolin_vpn description: 穿山甲 · Pangolin — 极简、稳定、跨平台网络加速客户端。 publish_to: "none" -version: 1.0.22+23 +version: 1.0.23+24 environment: sdk: ^3.5.0 diff --git a/client/windows/installer/pangolin.iss b/client/windows/installer/pangolin.iss index e4cdbb4..515d69d 100644 --- a/client/windows/installer/pangolin.iss +++ b/client/windows/installer/pangolin.iss @@ -3,7 +3,7 @@ ; 前置: 先在 client/ 跑 `flutter build windows`(Release),产物在 ; ..\..\build\windows\x64\runner\Release #define MyAppName "穿山甲 Pangolin" -#define MyAppVersion "1.0.22" +#define MyAppVersion "1.0.23" #define MyAppPublisher "Pangolin" #define MyAppExeName "pangolin_vpn.exe" #define BuildDir "..\..\build\windows\x64\runner\Release"