diff --git a/app/src/main/java/com/example/inventory/ui/AppViewModelProvider.kt b/app/src/main/java/com/example/inventory/ui/AppViewModelProvider.kt index 8d3305a5..6c622281 100644 --- a/app/src/main/java/com/example/inventory/ui/AppViewModelProvider.kt +++ b/app/src/main/java/com/example/inventory/ui/AppViewModelProvider.kt @@ -53,7 +53,7 @@ object AppViewModelProvider { // Initializer for HomeViewModel initializer { - HomeViewModel() + HomeViewModel(inventoryApplication().container.itemsRepository) } } } diff --git a/app/src/main/java/com/example/inventory/ui/home/HomeScreen.kt b/app/src/main/java/com/example/inventory/ui/home/HomeScreen.kt index f3cda809..21d17f04 100644 --- a/app/src/main/java/com/example/inventory/ui/home/HomeScreen.kt +++ b/app/src/main/java/com/example/inventory/ui/home/HomeScreen.kt @@ -39,6 +39,8 @@ import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.material3.TopAppBarDefaults import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.input.nestedscroll.nestedScroll @@ -47,9 +49,12 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp +import androidx.lifecycle.viewmodel.compose.viewModel +import androidx.lifecycle.viewmodel.viewModelFactory import com.example.inventory.InventoryTopAppBar import com.example.inventory.R import com.example.inventory.data.Item +import com.example.inventory.ui.AppViewModelProvider import com.example.inventory.ui.item.formatedPrice import com.example.inventory.ui.navigation.NavigationDestination import com.example.inventory.ui.theme.InventoryTheme @@ -67,10 +72,13 @@ object HomeDestination : NavigationDestination { fun HomeScreen( navigateToItemEntry: () -> Unit, navigateToItemUpdate: (Int) -> Unit, - modifier: Modifier = Modifier + modifier: Modifier = Modifier, + viewModel: HomeViewModel = viewModel(factory = AppViewModelProvider.Factory), ) { val scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior() + val homeUiState by viewModel.homeUiState.collectAsState() + Scaffold( modifier = modifier.nestedScroll(scrollBehavior.nestedScrollConnection), topBar = { @@ -94,7 +102,7 @@ fun HomeScreen( }, ) { innerPadding -> HomeBody( - itemList = listOf(), + itemList = homeUiState.itemList, // listOf(), onItemClick = navigateToItemUpdate, modifier = modifier.fillMaxSize(), contentPadding = innerPadding, diff --git a/app/src/main/java/com/example/inventory/ui/home/HomeViewModel.kt b/app/src/main/java/com/example/inventory/ui/home/HomeViewModel.kt index 84d676a8..cd1c9f50 100644 --- a/app/src/main/java/com/example/inventory/ui/home/HomeViewModel.kt +++ b/app/src/main/java/com/example/inventory/ui/home/HomeViewModel.kt @@ -17,12 +17,26 @@ package com.example.inventory.ui.home import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope import com.example.inventory.data.Item +import com.example.inventory.data.ItemsRepository +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.stateIn /** * ViewModel to retrieve all items in the Room database. */ -class HomeViewModel() : ViewModel() { +class HomeViewModel(itemsRepository: ItemsRepository) : ViewModel() { + val homeUiState: StateFlow = + itemsRepository.getAllItemsStream() + .map { HomeUiState(it) } + .stateIn( + scope = viewModelScope, + started = SharingStarted.WhileSubscribed(TIMEOUT_MILLIS), + initialValue = HomeUiState() + ) companion object { private const val TIMEOUT_MILLIS = 5_000L } diff --git a/build.gradle.kts b/build.gradle.kts index ac5e1ec2..f40de8ec 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -22,8 +22,8 @@ buildscript { } plugins { - id("com.android.application") version "8.1.4" apply false - id("com.android.library") version "8.1.4" apply false + id("com.android.application") version "8.13.1" apply false + id("com.android.library") version "8.13.1" apply false id("org.jetbrains.kotlin.android") version "1.9.20" apply false } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 1278c45c..ff320ed6 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Wed Aug 17 03:21:55 PDT 2022 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME