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:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user