Untitled
unknown
kotlin
a month ago
5.2 kB
5
Indexable
package com.example.cocktailmenu.presentation.ui.screen.home import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.width import androidx.compose.material3.FabPosition import androidx.compose.material3.Scaffold import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.navigation.NavController import com.example.cocktailmenu.R import com.example.cocktailmenu.domain.model.Cocktail import com.example.cocktailmenu.presentation.ui.components.LoadingLayout import com.example.cocktailmenu.presentation.ui.components.TopBarWithSearch import com.example.cocktailmenu.presentation.ui.screen.home.components.CocktailsList import com.example.cocktailmenu.presentation.ui.screen.home.components.ErrorLayout import com.example.cocktailmenu.presentation.ui.screen.home.components.FloatingButton import com.example.cocktailmenu.presentation.ui.theme.CocktailMenuTheme import com.example.cocktailmenu.presentation.ui.util.preview.SimplePreview import com.example.cocktailmenu.presentation.viewmodel.home.CocktailListViewState import com.example.cocktailmenu.presentation.viewmodel.home.CocktailsInteraction import com.example.cocktailmenu.presentation.viewmodel.home.CocktailsViewModel import org.koin.androidx.compose.koinViewModel @Composable internal fun HomeScreen( navController: NavController, viewModel: CocktailsViewModel = koinViewModel<CocktailsViewModel>() ) { val cocktailsViewState by viewModel.viewState.collectAsStateWithLifecycle() HomeLayout( cocktailsViewState = cocktailsViewState, onCocktailSelected = { it.idDrink?.let { //TODO add navigation to the details screen } }, onFilterButtonClick = { //TODO add navigation when user clicks on the filter button }, onFloatingButtonClick = { //TODO add navigation when user clicks on the floating button }, onInteraction = viewModel::onInteraction ) } @Composable private fun HomeLayout( cocktailsViewState: CocktailListViewState, onCocktailSelected: (Cocktail) -> Unit, onFilterButtonClick: () -> Unit, onFloatingButtonClick: () -> Unit, onInteraction: (CocktailsInteraction) -> Unit ) { Scaffold( topBar = { TopBarWithSearch( query = cocktailsViewState.searchInput, onQueryChange = { onInteraction(CocktailsInteraction.Query(it)) }, onFilterButtonClick = { onFilterButtonClick() onInteraction.invoke(CocktailsInteraction.FilterButton) } ) }, floatingActionButtonPosition = FabPosition.Center, floatingActionButton = { FloatingButton( modifier = Modifier.width(240.dp), text = R.string.feeling_lucky, onClick = { onFloatingButtonClick() onInteraction.invoke(CocktailsInteraction.FloatingButton) } ) } ) { paddingValues -> Column( modifier = Modifier .fillMaxSize() .padding(paddingValues), ) { when (cocktailsViewState) { is CocktailListViewState.Available -> { CocktailsList( cocktails = cocktailsViewState.cocktails, onCocktailSelected = { onCocktailSelected(it) onInteraction.invoke(CocktailsInteraction.CocktailItem(it)) } ) } is CocktailListViewState.Error -> { ErrorLayout(message = cocktailsViewState.message) } is CocktailListViewState.Loading -> { LoadingLayout() } } } } } @SimplePreview @Composable private fun HomeScreenPreview() { CocktailMenuTheme { HomeLayout( cocktailsViewState = CocktailListViewState.Available( searchInput = "", cocktails = listOf( Cocktail( idDrink = "1", strDrink = "Margarita", strImageSource = null, strIngredients = listOf("Alcohol", "Juice") ), Cocktail( idDrink = "12", strDrink = "Margarita ultra long", strImageSource = null, strIngredients = listOf("Juice1", "Juice2") ) ) ), onCocktailSelected = {}, onFilterButtonClick = {}, onFloatingButtonClick = {}, onInteraction = {}, ) } }
Editor is loading...
Leave a Comment