如何在 kotlin jetpack compose 中创建单例对象并用于两个屏幕的 UI 和视图模型?

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

我有一个这样的清单

 data class SelectedNtrItem(
        val items:ArrayList<NutritionSearchItem> = arrayListOf()
    )

我需要在两个可组合屏幕上使用此列表,因此我需要访问它的一个示例。我的想法是用singelton创建它并在UI和Viewmodel端使用它,但我无法完全做到这一点。

class SelectedNtrItemManager {
    companion object{
        private val _selectedNtrItem = MutableStateFlow(SelectedNtrItem())
        val selectedNtrItem: StateFlow<SelectedNtrItem> = _selectedNtrItem.asStateFlow()
    }
}

这是我作为singelton 创建的类。如何在两个可组合屏幕的视图模型和 UI 端使用它,也就是说,如何在两个屏幕上的 UI 端和视图模型端作为单个对象访问此列表,因为我需要相同的列表?

@Composable
fun FirstScreen(
    navHostController: NavHostController,
    viewModel: FirstScreenViewModel = hiltViewModel()
) {
...


@HiltViewModel
class FirstScreenViewModel @Inject constructor(
       .... ) : ViewModel() { ....

@Composable
fun SecondScreen(
    navHostController: NavHostController,
    viewModel: SecondScreenViewModel = hiltViewModel()
) {
...


@HiltViewModel
class SecondScreenViewModel @Inject constructor(
       .... ) : ViewModel() { ....
kotlin dependency-injection android-jetpack-compose singleton android-mvvm
1个回答
0
投票

您需要按如下方式创建ViewModel,并将其作为参数传递给相关屏幕。

private val sharedViewModel by viewModels<SharedViewModel>()

@Composable
fun FirstScreen(
    viewModel: SharedViewModel
) {
}

@Composable
fun SecondScreen(
    viewModel: SharedViewModel
) {
}
© www.soinside.com 2019 - 2024. All rights reserved.