3

So i have a few questions about using hiltviewmodels, states and remember in compose.

For some context, i have a ViewPager set up

HorizontalPager(
                count = 4,
                modifier = Modifier.fillMaxSize(),
                state = pagerState,
            ) { page ->
                when (page) {
                    0 -> PagerOne()
                    1 -> PagerTwo()
                    2 -> PagerThree()
                    3 -> PagerFour()
                }
            }

Lets say i have a State in my viewmodel declared like this

private val _data: MutableState<DataClass> = mutableStateOf(DataClass())
var data: State<DataClass> = _data

First, where do i inject my viewmodel? Is it fine to do it in the constructor of my pager composable?

@Composable
fun PagerOne(viewmodel : PagerOneViewmodel = hiltViewModel()) {
...

And if i want to get the value from that viewmodel state, do i need to wrap it into a remember lambda?

@Composable
fun PagerOne(viewmodel : PagerOneViewmodel = hiltViewModel()) {

val myState = viewmodel.data or var myState by remember { viewmodel.data }

Next question about flow and .collectasstate. Lets say i have a function in my viewmodel which returns a flow of data from Room Database.

fun getRoomdata() = roomRepository.getLatesData()

Is it correct to get the data like this in my composable?

val roomData = viewmodel.getRoomdata().collectasState(initial = emptyRoomdata())

Everything is working like expected, but im not sure these are the best approaches.

0 Answers0