fix(scale): 修复子设备IP收到数据后仍显示"未知"的问题
setDeviceIp 新增缓存回填逻辑:若设备已有缓存数据且 ip 为空, 立即用新 IP 更新所有相关条目并触发 StateFlow, 解决早期数据包在 IP 到达前入缓存导致 UI 无法更新的时序问题 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -34,11 +34,29 @@ class ScaleDataAggregator(private val localDeviceId: String) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 设置指定设备的 IP 地址
|
* 设置指定设备的 IP 地址
|
||||||
|
* 若缓存中已有该设备的数据且 ip 为空,立即回填并触发 StateFlow 更新,
|
||||||
|
* 解决早期数据包在 IP 到达前入缓存导致一直显示"未知"的问题
|
||||||
* @param deviceId 设备 ID
|
* @param deviceId 设备 ID
|
||||||
* @param ip IP 地址字符串
|
* @param ip IP 地址字符串
|
||||||
*/
|
*/
|
||||||
fun setDeviceIp(deviceId: String, ip: String) {
|
fun setDeviceIp(deviceId: String, ip: String) {
|
||||||
|
if (ip.isEmpty()) return
|
||||||
deviceIpMap[deviceId] = ip
|
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} 条")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user