Kotlin 使用单个函数更新不同的值

问题描述 投票:0回答:1

我正在制作一个应用程序,它将有多个基本数字跟踪器(数字保存在数据库中), 每个追踪器都会有一个按钮来添加或减少数量。

有没有办法在视图模型中编写一个函数来添加或减少所有跟踪器中可重用的数量?

示例代码:

@Composable
fun TrackerScreen(viewModel: TrackerViewModel) {

    val trackerUiState = viewModel.TrackerUiState.collectAsState()

    Column{
        Text("${trackerUiState.value.Tracker.valueOne}"
        Row{
            Button(onClick = { //function to increase valueOne by One })
                { Text("+1") }
            Button(onClick = { //function to reduce valueOne by One })

    Column{
        Text("${trackerUiState.value.tracker.valueTwo}"
        Row{
            Button(onClick = { //function to increase valueTwo by One })
                { Text("+1") }
            Button(onClick = { //function to reduce valueTwo by One })
// etc...

视图模型使用每个字段的数据类(跟踪器)调用数据库的状态

data class TrackerDetails(
    val tracker: Tracker = Tracker()
)

data class Tracker(
    val valueOne: Int = 0,
    val valueTwo: Int = 0,
    //etc...
)

我知道我可以将这些全部设置为单独的功能:

fun increaseTrackerOneByOne() {
    viewModelScope.launch {
        val trackerUpdate = trackerUiState.value.tracker.toTracker()
        trackerRepository.updateTracker(trackerUpdate.copy(valueOne = trackerUpdate.valueOne + 1))
    }
}

我想知道是否有一种方法可以设置这种功能来工作,无论它连接到哪个跟踪器?

(我正在开发的应用程序将有大约 20-30 个这样的跟踪器,如果不是更多的话,所以它将节省我大量的空间和打字以及遵循不重复代码的最佳实践..)

kotlin viewmodel code-reuse
1个回答
0
投票

我现在找到了一个解决方法:

  • 一个 mutableIntState 数字“editableNumber”
  • 根据 editableNumber 调用不同编辑行的 where 函数。
  • 每个按钮将 editableNumber 设置为它想要调用的行。

这仍然需要为每个按钮提供单独的可组合项,而不是能够基于 list.forEach 创建它们,但这是一个开始。

© www.soinside.com 2019 - 2024. All rights reserved.