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
|
@override
|
||||||
Future<List<Node>> build() async {
|
Future<List<Node>> build() async {
|
||||||
|
_disposed = false; // build 重跑表示 notifier 仍在用:必须复位,否则上一轮 onDispose 置的
|
||||||
|
// true 会让 setLivePing/_measure 永久静默(urltest 回写/延迟实测失效 → 延迟冻成 —)。
|
||||||
ref.onDispose(() => _disposed = true);
|
ref.onDispose(() => _disposed = true);
|
||||||
final auth = ref.watch(authProvider);
|
// 只关心「是否登录」:token 续期(accessToken 变)不应重建 nodesProvider、清空已测延迟。
|
||||||
if (!auth.isLoggedIn) return const [];
|
final loggedIn = ref.watch(authProvider.select((s) => s.isLoggedIn));
|
||||||
|
if (!loggedIn) return const [];
|
||||||
try {
|
try {
|
||||||
final list = await _fetchWithRefresh();
|
final list = await _fetchWithRefresh();
|
||||||
_lastFetch = DateTime.now();
|
_lastFetch = DateTime.now();
|
||||||
|
|||||||
Reference in New Issue
Block a user