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} 条") + } } /**