xetra11
11/25/2020, 2:10 PMZach Klippenstein (he/him) [MOD]
11/25/2020, 2:15 PMxetra11
11/25/2020, 2:16 PMxetra11
11/25/2020, 2:16 PMxetra11
11/25/2020, 2:17 PMZach Klippenstein (he/him) [MOD]
11/25/2020, 2:23 PMZach Klippenstein (he/him) [MOD]
11/25/2020, 2:23 PMZach Klippenstein (he/him) [MOD]
11/25/2020, 2:24 PMZach Klippenstein (he/him) [MOD]
11/25/2020, 2:24 PMxetra11
11/25/2020, 2:24 PMZach Klippenstein (he/him) [MOD]
11/25/2020, 2:24 PMxetra11
11/25/2020, 2:25 PMIgor Demin
11/25/2020, 4:00 PMUnidirectional data flow doesn't require VMViewModel also can be considered as a pattern (Model - ViewModel - View). We can use something like this:
@Composable
fun HomeView() {
val viewModel = remember { HomeViewModel() }
Text("Count ${viewModel.counter}")
}
class HomeViewModel {
var counter by mutableStateOf(3)
}
or
@Composable
fun HomeView() {
val viewModel = remember { HomeViewModel() }
Text("Count ${viewModel.counter.collectAsState().value}")
}
class HomeViewModel {
var counter = StateFlow(3)
}
Cedrick Cooke
11/25/2020, 7:49 PMabstract class ViewModel(di: DI) : DIAware by di {
private val job = Job()
protected val lifecycleScope: CoroutineScope = CoroutineScope(job)
fun dispose() {
job.complete()
}
}
@Composable
inline fun <reified T : ViewModel> viewModel(): T {
val di = AmbientDI.current
val viewModel = remember { T::class.java.constructors.single().newInstance(di) as T }
DisposableEffect(viewModel) {
onDispose {
viewModel.dispose()
}
}
return viewModel
}
This wouldn't be too hard to remove the reflection or DI if you'd rather not use those.xetra11
11/25/2020, 10:15 PMxetra11
11/25/2020, 10:16 PMgildor
11/26/2020, 3:14 PM