我有一个这样的清单
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() { ....
您需要按如下方式创建ViewModel,并将其作为参数传递给相关屏幕。
private val sharedViewModel by viewModels<SharedViewModel>()
@Composable
fun FirstScreen(
viewModel: SharedViewModel
) {
}
@Composable
fun SecondScreen(
viewModel: SharedViewModel
) {
}