fix(client): 修 _disposed 潜伏 bug + build 只 watch isLoggedIn,根治延迟冻成 —

根因: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 <noreply@anthropic.com>
This commit is contained in:
wangjia
2026-06-30 01:32:15 +08:00
parent 15133b8a72
commit b99d6d71ae
+5 -2
View File
@@ -30,9 +30,12 @@ class NodesNotifier extends AsyncNotifier<List<Node>> {
@override
Future<List<Node>> 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();