Colton Idle
08/29/2023, 3:25 PMleandro
08/29/2023, 3:31 PMColton Idle
08/29/2023, 3:33 PMleandro
08/29/2023, 3:34 PMdorche
09/01/2023, 3:54 PMColton Idle
09/01/2023, 5:17 PMColton Idle
09/01/2023, 5:17 PMColton Idle
09/01/2023, 5:19 PMColton Idle
09/01/2023, 5:20 PMColton Idle
09/01/2023, 5:20 PMdorche
09/01/2023, 5:41 PMdorche
09/01/2023, 5:43 PMdorche
09/01/2023, 5:49 PM@Inject
class KotlinInjectViewModelFactory(
private val fooViewModel: (SavedStateHandle) -> PaymentOverviewViewModel,
private val barViewModel: () -> UsernamePasswordViewModel,
): ViewModelProvider.Factory {
@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel> create(
modelClass: Class<T>,
extras: CreationExtras
): T {
val savedStateHandle = extras.createSavedStateHandle()
return when (modelClass) {
FooViewModel::class.java -> fooViewModel(savedStateHandle)
BarViewModel::class.java -> barViewModel()
else -> throw Exception("Unknown view model")
} as T
}
}
/**
* Taken from docs: <https://github.com/evant/kotlin-inject/blob/main/docs/android.md#compose>
* */
@Composable
inline fun <reified VM : ViewModel> kotlinInjectViewModel(
viewModelStoreOwner: ViewModelStoreOwner = checkNotNull(LocalViewModelStoreOwner.current) {
"No ViewModelStoreOwner was provided via LocalViewModelStoreOwner"
}
): VM {
val context = LocalContext.current
val component = ViewModelFactoryComponent::class.create(context.applicationComponent)
return viewModel(
viewModelStoreOwner = viewModelStoreOwner,
factory = component.factory()
)
}
Colton Idle
09/01/2023, 6:15 PM