kluck
09/09/2021, 10:16 AMclass App : Application(), DIAware {
val homeModule: (app: App) -> DI.Module = { app ->
DI.Module("homeModule") {
bindProvider { HomeViewModel(app) }
}
}
override val di: DI by DI.lazy {
import(homeModule(this@App))
}
[...]
}
ViewModel:
class HomeViewModel(app: App) : AndroidViewModel(app), DIAware {
override val di by closestDI()
private val initializingUseCase: InitializingUseCase by instance()
private val _status: MutableStateFlow<String> = MutableStateFlow("")
val status: StateFlow<String> = _status.asStateFlow()
[...]
}
Home Composable:
@Composable
fun Home() {
val di = androidContextDI()
val viewModel by di.instance() // -> This doesn't work
val status by getLifecycleAwareState(flow = viewModel.status, initialValue = "")
StatelessHome(status = status)
}
I can't find the correct way to instanciate my viewModel
. The extensions from kodein-di-framework-android-x-viewmodel
I found are based on AppCompatActivity
romainbsl
09/09/2021, 8:22 PMandroid-x
could helpromainbsl
09/09/2021, 8:23 PMimplementation 'org.kodein.di:kodein-di-framework-compose:7.7.0'
implementation 'org.kodein.di:kodein-di-framework-android-x:7.7.0'
implementation 'org.kodein.di:kodein-di-framework-android-x-viewmodel:7.7.0'
romainbsl
09/09/2021, 8:23 PMkluck
09/13/2021, 7:10 AMkluck
09/13/2021, 1:18 PMhomeViewModel
whenever there's a Compose refresh. Here's my modified gist: https://gist.github.com/lucmazon/90644bce6b7215092356285c5dbcdf90
Any idea why that happens?romainbsl
09/13/2021, 1:34 PMbindProvider {}
that is invoked each time we call rememberInstance
romainbsl
09/13/2021, 1:34 PMbindSingleton
might workromainbsl
09/13/2021, 1:35 PMrememberViewModel
based on the viewModel
delegate from kodein-di-framework-android-x-viewmodel
romainbsl
09/13/2021, 1:36 PMkluck
09/13/2021, 1:36 PMromainbsl
09/13/2021, 1:40 PMkluck
09/13/2021, 1:47 PMkluck
09/13/2021, 1:48 PMromainbsl
09/13/2021, 2:15 PMromainbsl
09/13/2021, 2:16 PMromainbsl
09/14/2021, 12:02 PMrememberViewModel
@Composable functionromainbsl
09/14/2021, 12:02 PMmaven { url = "<https://oss.sonatype.org/content/repositories/snapshots>" }
romainbsl
09/14/2021, 12:03 PMorg.kodein.di:kodein-di-framework-compose:7.9.0-master-SNAPSHOT
kluck
09/14/2021, 1:39 PMromainbsl
09/14/2021, 1:44 PMromainbsl
09/14/2021, 1:44 PMkluck
09/14/2021, 1:47 PMromainbsl
09/14/2021, 2:19 PM