Starter template for Compose with Hilt, Coil, and Retrofit
git clone https://github.com/baec23/ComposeTemplate.git --branch main
bash customizer.sh {newPackageName} {newAppName}
/*
*
* TODO: Add route to NavHost
*
*/
const val $SCREEN_NAME_ROUTE_CC$ = "$SCREEN_NAME_ROUTE_SC$"
fun androidx.navigation.NavGraphBuilder.$SCREEN_NAME_CC$(){
composable(route = $SCREEN_NAME_ROUTE_CC$){
$NAME$Screen()
}
}
fun androidx.navigation.NavController.navigateTo$SCREEN_NAME_PC$(navOptions: androidx.navigation.NavOptions? = null){
navigate(route = $SCREEN_NAME_ROUTE_CC$, navOptions = navOptions)
}
/*
*
* TODO: Add route to NavHost
*
*/
const val $SCREEN_NAME_ROUTE_CC$ = "$SCREEN_NAME_ROUTE_SC$"
fun androidx.navigation.NavGraphBuilder.$SCREEN_NAME_CC$() {
composable(
route = "$$$SCREEN_NAME_ROUTE_CC$/{$ARG_NAME$}",
arguments = listOf(navArgument("$ARG_NAME$") {
type = androidx.navigation.NavType.IntType
nullable = false
})
) {
val $ARG_NAME$ = it.arguments?.getInt("$ARG_NAME$")
$ARG_NAME$?.let{
val viewModel: $NAME$ViewModel = hiltViewModel()
//TODO: Set Arg in ViewModel
$SCREEN_NAME_PC$(viewModel = viewModel, $ARG_NAME$ = $ARG_NAME$)
}
}
}
fun androidx.navigation.NavController.navigateTo$SCREEN_NAME_PC$($ARG_NAME$: Int, navOptions: androidx.navigation.NavOptions? = null){
val routeWithArguments = "$$$SCREEN_NAME_ROUTE_CC$/$$$ARG_NAME$"
navigate(route = routeWithArguments, navOptions = navOptions)
}
/*
*
* TODO: Add route to NavHost
*
*/
const val $SCREEN_NAME_ROUTE_CC$ = "$SCREEN_NAME_ROUTE_SC$"
fun androidx.navigation.NavGraphBuilder.$SCREEN_NAME_CC$(){
composable(route = $SCREEN_NAME_ROUTE_CC$){
$NAME$Screen()
}
}
fun androidx.navigation.NavController.navigateTo$SCREEN_NAME_PC$(navOptions: androidx.navigation.NavOptions? = null){
navigate(route = $SCREEN_NAME_ROUTE_CC$, navOptions = navOptions)
}
@androidx.compose.runtime.Composable
fun $NAME$Screen(
viewModel: $NAME$ViewModel = androidx.hilt.navigation.compose.hiltViewModel()
) {
$END$
}
/*
*
* TODO: Add route to NavHost
*
*/
const val $SCREEN_NAME_ROUTE_CC$ = "$SCREEN_NAME_ROUTE_SC$"
fun androidx.navigation.NavGraphBuilder.$SCREEN_NAME_CC$() {
composable(
route = "$$$SCREEN_NAME_ROUTE_CC$/{$ARG_NAME$}",
arguments = listOf(navArgument("$ARG_NAME$") {
type = androidx.navigation.NavType.IntType
nullable = false
})
) {
val $ARG_NAME$ = it.arguments?.getInt("$ARG_NAME$")
$ARG_NAME$?.let{
val viewModel: $NAME$ViewModel = hiltViewModel()
//TODO: Set Arg in ViewModel
$SCREEN_NAME_PC$(viewModel = viewModel, $ARG_NAME$ = $ARG_NAME$)
}
}
}
fun androidx.navigation.NavController.navigateTo$SCREEN_NAME_PC$($ARG_NAME$: Int, navOptions: androidx.navigation.NavOptions? = null){
val routeWithArguments = "$$$SCREEN_NAME_ROUTE_CC$/$$$ARG_NAME$"
navigate(route = routeWithArguments, navOptions = navOptions)
}
@androidx.compose.runtime.Composable
fun $NAME$Screen(
viewModel: $NAME$ViewModel = androidx.hilt.navigation.compose.hiltViewModel(),
$ARG_NAME$: Int
) {
$END$
}
private val _$NAME$ = kotlinx.coroutines.flow.MutableStateFlow<$TYPE$>()
val $NAME$ = _$NAME$.asStateFlow()
androidx.compose.foundation.layout.Box(
modifier = androidx.compose.ui.Modifier.fillMaxSize().background(Color.LightGray),
contentAlignment = Alignment.Center,
) {
androidx.compose.material3.Text("Placeholder")
}
@dagger.hilt.android.lifecycle.HiltViewModel
class $NAME$ViewModel @javax.inject.Inject constructor(): androidx.lifecycle.ViewModel() {
$END$
fun onEvent(event: $NAME$UiEvent) {
when(event) {
}
}
}
sealed class $NAME$UiEvent{
}
private val _$NAME$: androidx.compose.runtime.MutableState<$TYPE$> = androidx.compose.runtime.mutableStateOf()
val $NAME$: androidx.compose.runtime.State<$TYPE$> = _$NAME$