fix: 首页用缓存数据填充卡片数字,消除刷新闪烁

之前流程:inflate(数字=0) → API请求 → 数字跳到真实值,产生闪烁
现在流程:inflate → 立即用 lastStats 缓存填充 → API静默更新
首次启动无缓存时仍显示 XML 默认值 0,之后都是无感刷新

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
dongliang
2026-05-07 17:12:42 +09:30
parent e67100ba83
commit 3d991c0169

View File

@@ -123,10 +123,15 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
// 主动获取当前电量
initBatteryStatus()
// 先加载统计数据(设好 lastStats 基准),再监听事件
// EventBus buffer=64 会暂存期间的通知,不丢失
// 先用缓存数据填充(避免 "0" → 真实值的闪烁)
notificationManager.lastStats?.let { cached ->
updateCardNum(tvPoolNum, cached.waitForTask)
updateCardNum(tvPunchNum, cached.treatTask)
updateCardNum(tvCompleteNum, cached.incompleteTask)
}
// 再异步请求最新数据,静默更新
viewLifecycleOwner.lifecycleScope.launch {
// 同步等待统计数据返回
val result = safeApiCall { taskApi.getStatistics() }
if (result is ApiResult.Success && result.data != null) {
val data = result.data
@@ -134,7 +139,6 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
updateCardNum(tvPunchNum, data.treatTask)
updateCardNum(tvCompleteNum, data.incompleteTask)
notificationManager.lastStats = data
Timber.d("首页: lastStats 基准已设置 ${data}")
}
// 基准设好后再开始监听事件