Andrew Leung
08/18/2021, 3:45 PMAndrew Leung
08/18/2021, 3:46 PMAndrew Leung
08/18/2021, 3:51 PMclass MyActivity: ComponentActivity {
@Inject
lateinit var myDependency: Dependency
override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {
super.onCreate(savedInstanceState, persistentState)
setContent {
TopLevel()
}
}
}
@Composable
fun TopLevel() {
CompA() {
CompB() {
CompC() {
CompE() {
CompF() {
CompG(myDependency) // what's the best way to get the dependency down here?
}
}
}
}
}
}
Andrew Leung
08/18/2021, 3:54 PM@Composable
fun CompG(viewModel: MyViewModel = hiltViewModel()){}
But if it wasn’t a ViewModel and an ordinary dependency, could I do something similar and specify a default value on the param:
@Composable
fun CompG(myDependency: Dependency = get(), viewModel: MyViewModel = hiltViewModel()) {}
Ravi
08/18/2021, 5:09 PMCompositionLocalProvider(LocalDependency provides myDependency) {
TopLevel()
}
u can use CompositionLocalProviderRavi
08/18/2021, 5:10 PMval LocalDependency = staticCompositionLocalOf<GenericState> { error("Dependency not provided") }
In CompG
CompG() { val myDependency = LocalDependency.current }
Andrew Leung
08/18/2021, 5:15 PMRavi
08/18/2021, 5:40 PMCompG
cause if your Dependency
is not required anywhere else, it will clear out memory when CompG
gets disposed. CompositionLocalProvider
is used to avoid passing information through a lot of composable functionsColton Idle
08/18/2021, 6:50 PMAndrew Leung
08/18/2021, 7:25 PMColton Idle
08/18/2021, 8:02 PMjim
08/18/2021, 11:28 PMclass MyActivity: ComponentActivity {
@Inject
lateinit var myDependency: Dependency
override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {
super.onCreate(savedInstanceState, persistentState)
setContent {
TopLevel(myDependency)
}
}
}
@Composable
fun TopLevel(myDependency: Dependency) {
CompA() {
CompB() {
CompC() {
CompE() {
CompF() {
CompG(myDependency) // dependency now available here.
}
}
}
}
}
}
Andrew Leung
08/18/2021, 11:49 PMAndrew Leung
08/18/2021, 11:51 PMColton Idle
08/18/2021, 11:53 PMColton Idle
08/18/2021, 11:55 PMAndrew Leung
08/18/2021, 11:58 PMColton Idle
08/19/2021, 12:03 AMjim
08/19/2021, 3:03 AM