You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将mutableIntStateOf()初始值设为ViewState中的API返回值?

解决方案

问题核心是ModellerSharedData中_userInputtedRetirementAge的初始值硬编码为0,API返回的初始退休年龄未同步到这个共享状态,导致初始显示时触发initialRetirementAge != userInputtedRetirementAge判断,显示了0。

方法一:从根源同步初始值(推荐)

修改ModellerSharedData,添加仅允许初始化一次的方法,确保用户输入状态的初始值与API返回值一致:

object ModellerSharedData {
    private var _userInputtedRetirementAge = mutableIntStateOf(0)
    private var isRetirementAgeInitialized = false // 标记是否已完成初始化

    var UserInputtedRetirementAge: Int
        get() = _userInputtedRetirementAge.intValue
        set(value) {
            _userInputtedRetirementAge.intValue = value
        }
    val userInputtedRetirementAge get() = _userInputtedRetirementAge

    // 初始化退休年龄,仅执行一次,避免后续API刷新覆盖用户输入
    fun initRetirementAge(initialAge: Int) {
        if (!isRetirementAgeInitialized) {
            _userInputtedRetirementAge.intValue = initialAge
            isRetirementAgeInitialized = true
        }
    }
}

在ViewModel获取到API数据后,调用该初始化方法同步值:

init {
    viewModelScope.launch {
        personalProjectionsRepository.projectionsStateFlow
            //...
            .collect { repo ->
                val initialAge = repo.age
                viewState.value = ModellerInitialViewState(initialRetirementAge = initialAge)
                // 将API返回的初始值同步到共享状态
                ModellerSharedData.initRetirementAge(initialAge)
            }
    }
}

初始状态下userInputtedRetirementAge会与API返回的initialRetirementAge一致,Composable显示初始值;用户修改后共享状态更新,自动切换为显示用户输入的值。

方法二:临时调整Composable显示逻辑(不推荐,仅应急)

若不想修改共享状态结构,可在Composable中增加判断,当共享状态为初始0时显示API返回值:

MakeChangeCard(
    cardTitle = R.string.retirement_age_screen_title,
    editLinkText = R.string.edit_link,
    cardContent = if (userInputtedRetirementAge != 0) {
        userInputtedRetirementAge.toString()
    } else {
        initialRetirementAge.toString()
    },
    onCardClick = onRetirementCardClick,
    modifier = Modifier.weight(1f)
)

⚠️ 注意:该方法存在缺陷——若用户合法输入0,会错误显示初始值,仅适合临时场景使用。


内容的提问来源于stack exchange,提问作者callMe_whatever

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 13:27:05