From 9ae0d709f2f160f121f5097541a7ecba498ff476 Mon Sep 17 00:00:00 2001 From: lvmeng <848755140@qq.com> Date: Wed, 8 Apr 2026 18:19:07 +0800 Subject: [PATCH] =?UTF-8?q?fix(scale):=20=E4=BF=AE=E5=A4=8D=E5=AD=90?= =?UTF-8?q?=E8=AE=BE=E5=A4=87IP=E6=94=B6=E5=88=B0=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=90=8E=E4=BB=8D=E6=98=BE=E7=A4=BA"=E6=9C=AA=E7=9F=A5"?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit setDeviceIp 新增缓存回填逻辑:若设备已有缓存数据且 ip 为空, 立即用新 IP 更新所有相关条目并触发 StateFlow, 解决早期数据包在 IP 到达前入缓存导致 UI 无法更新的时序问题 Co-Authored-By: Claude Sonnet 4.6 --- .../dish/match/scale/ScaleDataAggregator.kt | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/app/src/main/java/com/shuwei/dish/match/scale/ScaleDataAggregator.kt b/app/src/main/java/com/shuwei/dish/match/scale/ScaleDataAggregator.kt index c091e8b..e5791f7 100644 --- a/app/src/main/java/com/shuwei/dish/match/scale/ScaleDataAggregator.kt +++ b/app/src/main/java/com/shuwei/dish/match/scale/ScaleDataAggregator.kt @@ -34,11 +34,29 @@ class ScaleDataAggregator(private val localDeviceId: String) { /** * 设置指定设备的 IP 地址 + * 若缓存中已有该设备的数据且 ip 为空,立即回填并触发 StateFlow 更新, + * 解决早期数据包在 IP 到达前入缓存导致一直显示"未知"的问题 * @param deviceId 设备 ID * @param ip IP 地址字符串 */ fun setDeviceIp(deviceId: String, ip: String) { + if (ip.isEmpty()) return deviceIpMap[deviceId] = ip + // 回填该设备所有 ip 为空的缓存条目 + val keys = cache.keys.filter { it.startsWith("$deviceId#") } + if (keys.isEmpty()) return + var updated = false + keys.forEach { key -> + val old = cache[key] ?: return@forEach + if (old.ip.isEmpty()) { + cache[key] = old.copy(ip = ip) + updated = true + } + } + if (updated) { + _allScales.value = HashMap(cache) + Log.d(TAG, "已回填设备IP: $deviceId -> $ip, 共 ${keys.size} 条") + } } /**