diff --git a/client/lib/state/nodes_provider.dart b/client/lib/state/nodes_provider.dart index 9120d48..305a8ec 100644 --- a/client/lib/state/nodes_provider.dart +++ b/client/lib/state/nodes_provider.dart @@ -56,13 +56,18 @@ class NodesNotifier extends AsyncNotifier> { } /// 后台实测各节点延迟,完成后回填(notifier 未销毁才更新)。 + /// 探测失败(返回 0,如连接态全局 TUN 把到节点的 TCP 握手接住)时**保留旧 ping**, + /// 不把已知延迟覆盖成空——否则连上后节点列表延迟会整列消失。 Future _measure(List list) async { if (list.isEmpty) return; final pings = await probeAll( [for (final n in list) (uuid: n.uuid, host: n.host, port: n.port)], ); if (_disposed) return; - final updated = [for (final n in list) n.copyWith(ping: pings[n.uuid] ?? n.ping)]; + final updated = [ + for (final n in list) + n.copyWith(ping: (pings[n.uuid] ?? 0) > 0 ? pings[n.uuid]! : n.ping) + ]; state = AsyncData(updated); }