android 如何减少Jetpack组合中可组合函数的大量参数列表?

k2arahey  于 2023-03-06  发布在  Android
关注(0)|答案(2)|浏览(159)

我正在构建一个相当复杂的应用程序,在某个时候我注意到我的可组合函数变得非常庞大,我怀疑这不是一个好的实践。有没有一个模式/解决方案可以让我在未来实现并遵循,以避免这些庞大的可组合函数?

TopSection(
                filterParametersState = filterParametersState,
                itineraryCount = viewModel.flightData.value.result?.itineraryCount ?: 0,
                buttonNames = viewModel.buttonNames,
                selectedButtonIndex = viewModel.selectedButtonIndex.value,
                selectedButtonName = viewModel.selectedButtonName.value,
                isThemeSwitchChecked = themeViewModel.isDarkTheme,
                onDurationButtonClicked = { buttonName -> viewModel.updateFilterMaxDuration(buttonName) },
                onThemeSwitchClicked = { themeViewModel.switchTheme() },
                onSliderValueChange = { valueFromSlider -> viewModel.updateFilterMaxPrice(valueFromSlider) },
                onParamsUpperClicked = { buttonIndex, buttonName ->
                    viewModel.updateSelectedButtonIndex(buttonIndex)
                    viewModel.updateIsDialogOpen()
                    viewModel.updateSelectedButtonName(buttonName)
                },
                onParamsBottomClicked = { buttonName ->
                    if (buttonName != "SAVE") {
                        viewModel.updateIsDialogOpen()
                        viewModel.updateSelectedButtonName(buttonName)
                    } else {
                        commonViewModel.updateCurrentFlightParams(viewModel.flightSearch.value)
                        viewModel.getFlights()
                    }
                }
            )
pjngdqdw

pjngdqdw1#

以下方法可用于减少可组合函数中的参数数量:
将相似参数分组到数据类中:你可以将相关的参数组合成一个数据类,而不是单独发送它们。这样做,函数调用可能会变得更短,更容易阅读。
使用默认参数值:可以为可选参数给予默认参数值。这可以简化函数调用,并需要更少的参数。

rbpvctlc

rbpvctlc2#

data class abc(
    val name: String,
    val age: Int,
    val address: String
)

@Composable
fun RandomFunction(obj: abc) {
    // ...
}

//编辑

onDurationButtonClicked = { buttonName -> 
       //make here function 
       buttonFunction(buttonName) //this is function calling
    } 
//make here function impl

   fun buttonFunction(parameter){ 
      viewModel.updateFilterMaxDuration(buttonName) 
   }

相关问题