From b99d6d71aec17c967fa0a08abfdacb8b6b985925 Mon Sep 17 00:00:00 2001 From: wangjia <809946525@qq.com> Date: Tue, 30 Jun 2026 01:32:15 +0800 Subject: [PATCH] =?UTF-8?q?fix(client):=20=E4=BF=AE=20=5Fdisposed=20?= =?UTF-8?q?=E6=BD=9C=E4=BC=8F=20bug=20+=20build=20=E5=8F=AA=20watch=20isLo?= =?UTF-8?q?ggedIn,=E6=A0=B9=E6=B2=BB=E5=BB=B6=E8=BF=9F=E5=86=BB=E6=88=90?= =?UTF-8?q?=20=E2=80=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因:1.0.36 的 401 自愈触发 auth token 续期 → authProvider 状态变 → nodesProvider.build() 重跑 → Riverpod 先调上一轮 ref.onDispose(()=>_disposed=true),新 build 没复位 → _disposed 永久 true → setLivePing/_measure 开头的 if(_disposed)return 让 urltest 回写/延迟实测全部静默 → 延迟冻在 —。修:① build 开头 _disposed=false 复位;② build 改 watch authProvider.select ((s)=>s.isLoggedIn),token 续期(accessToken 变但仍登录)不再重建 nodesProvider、不清延迟。 Co-Authored-By: Claude Opus 4.8 --- client/lib/state/nodes_provider.dart | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/client/lib/state/nodes_provider.dart b/client/lib/state/nodes_provider.dart index 6292b3a..41b9665 100644 --- a/client/lib/state/nodes_provider.dart +++ b/client/lib/state/nodes_provider.dart @@ -30,9 +30,12 @@ class NodesNotifier extends AsyncNotifier> { @override Future> build() async { + _disposed = false; // build 重跑表示 notifier 仍在用:必须复位,否则上一轮 onDispose 置的 + // true 会让 setLivePing/_measure 永久静默(urltest 回写/延迟实测失效 → 延迟冻成 —)。 ref.onDispose(() => _disposed = true); - final auth = ref.watch(authProvider); - if (!auth.isLoggedIn) return const []; + // 只关心「是否登录」:token 续期(accessToken 变)不应重建 nodesProvider、清空已测延迟。 + final loggedIn = ref.watch(authProvider.select((s) => s.isLoggedIn)); + if (!loggedIn) return const []; try { final list = await _fetchWithRefresh(); _lastFetch = DateTime.now();