Skip to content

Commit 3cafda5

Browse files
committed
Add previews to CartScreen
1 parent a1dfdf7 commit 3cafda5

File tree

1 file changed

+87
-7
lines changed
  • Fruitties/androidApp/src/main/java/com/example/fruitties/android/ui

1 file changed

+87
-7
lines changed

Fruitties/androidApp/src/main/java/com/example/fruitties/android/ui/CartScreen.kt

Lines changed: 87 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import androidx.compose.foundation.layout.Row
2121
import androidx.compose.foundation.layout.Spacer
2222
import androidx.compose.foundation.layout.WindowInsets
2323
import androidx.compose.foundation.layout.WindowInsetsSides
24+
import androidx.compose.foundation.layout.consumeWindowInsets
2425
import androidx.compose.foundation.layout.fillMaxWidth
2526
import androidx.compose.foundation.layout.only
2627
import androidx.compose.foundation.layout.padding
@@ -38,7 +39,6 @@ import androidx.compose.material3.FilledIconButton
3839
import androidx.compose.material3.HorizontalDivider
3940
import androidx.compose.material3.Icon
4041
import androidx.compose.material3.IconButton
41-
import androidx.compose.material3.IconButtonColors
4242
import androidx.compose.material3.IconButtonDefaults
4343
import androidx.compose.material3.MaterialTheme
4444
import androidx.compose.material3.Scaffold
@@ -53,17 +53,21 @@ import androidx.compose.ui.graphics.Color
5353
import androidx.compose.ui.platform.LocalContext
5454
import androidx.compose.ui.res.stringResource
5555
import androidx.compose.ui.text.style.TextAlign
56+
import androidx.compose.ui.tooling.preview.Preview
5657
import androidx.compose.ui.unit.dp
5758
import androidx.lifecycle.viewmodel.compose.viewModel
59+
import com.example.fruitties.android.MyApplicationTheme
5860
import com.example.fruitties.android.R
5961
import com.example.fruitties.android.di.App
6062
import com.example.fruitties.model.CartItemDetails
63+
import com.example.fruitties.model.Fruittie
64+
import com.example.fruitties.viewmodel.CartUiState
6165
import com.example.fruitties.viewmodel.CartViewModel
6266
import com.example.fruitties.viewmodel.creationExtras
6367

64-
@OptIn(ExperimentalMaterial3Api::class)
6568
@Composable
6669
fun CartScreen(onNavBarBack: () -> Unit) {
70+
6771
// Instantiate a ViewModel with a dependency on the AppContainer.
6872
// To make ViewModel compatible with KMP, the ViewModel factory must
6973
// create an instance without referencing the Android Application.
@@ -78,6 +82,22 @@ fun CartScreen(onNavBarBack: () -> Unit) {
7882

7983
val cartState by viewModel.cartUiState.collectAsState()
8084

85+
CartScreen(
86+
onNavBarBack = onNavBarBack,
87+
cartState = cartState,
88+
increaseCountClick = viewModel::increaseCountClick,
89+
decreaseCountClick = viewModel::decreaseCountClick,
90+
)
91+
}
92+
93+
@OptIn(ExperimentalMaterial3Api::class)
94+
@Composable
95+
fun CartScreen(
96+
onNavBarBack: () -> Unit,
97+
cartState: CartUiState,
98+
decreaseCountClick: (CartItemDetails) -> Unit,
99+
increaseCountClick: (CartItemDetails) -> Unit,
100+
) {
81101
Scaffold(
82102
topBar = {
83103
CenterAlignedTopAppBar(
@@ -109,14 +129,13 @@ fun CartScreen(onNavBarBack: () -> Unit) {
109129
) { paddingValues ->
110130
Column(
111131
modifier = Modifier
112-
// Support edge-to-edge (required on Android 15)
113-
// https://developer.android.com/develop/ui/compose/layouts/insets#inset-size
114132
.padding(paddingValues)
133+
.consumeWindowInsets(paddingValues)
115134
.padding(16.dp),
116135
) {
117136
val cartItemCount = cartState.totalItemCount
118137
Text(
119-
text = "Cart has $cartItemCount items",
138+
text = stringResource(R.string.cart_has_items, cartItemCount),
120139
)
121140
HorizontalDivider()
122141
LazyColumn(
@@ -125,8 +144,8 @@ fun CartScreen(onNavBarBack: () -> Unit) {
125144
items(cartState.cartDetails) { cartItem ->
126145
CartItem(
127146
cartItem = cartItem,
128-
decreaseCountClick = viewModel::decreaseCountClick,
129-
increaseCountClick = viewModel::increaseCountClick,
147+
decreaseCountClick = decreaseCountClick,
148+
increaseCountClick = increaseCountClick,
130149
)
131150
}
132151
item {
@@ -146,8 +165,10 @@ fun CartItem(
146165
cartItem: CartItemDetails,
147166
increaseCountClick: (CartItemDetails) -> Unit,
148167
decreaseCountClick: (CartItemDetails) -> Unit,
168+
modifier: Modifier = Modifier,
149169
) {
150170
Row(
171+
modifier = modifier,
151172
verticalAlignment = Alignment.CenterVertically,
152173
) {
153174
Text(text = "${cartItem.count}x")
@@ -176,3 +197,62 @@ fun CartItem(
176197
}
177198
}
178199
}
200+
201+
@Preview
202+
@Composable
203+
private fun CartScreenPreview() {
204+
MyApplicationTheme {
205+
CartScreen(
206+
onNavBarBack = {},
207+
cartState = CartUiState(
208+
cartDetails = listOf(
209+
CartItemDetails(
210+
fruittie = Fruittie(
211+
name = "Banana",
212+
fullName = "Banana Banana",
213+
calories = "100",
214+
),
215+
count = 4,
216+
),
217+
CartItemDetails(
218+
fruittie = Fruittie(
219+
name = "Orange",
220+
fullName = "Orange Orange",
221+
calories = "100",
222+
),
223+
count = 1,
224+
),
225+
CartItemDetails(
226+
fruittie = Fruittie(
227+
name = "Apple",
228+
fullName = "Apple Apple",
229+
calories = "100",
230+
),
231+
count = 100,
232+
),
233+
)
234+
),
235+
decreaseCountClick = {},
236+
increaseCountClick = {},
237+
)
238+
}
239+
}
240+
241+
@Preview
242+
@Composable
243+
private fun CartItemPreview() {
244+
MyApplicationTheme {
245+
CartItem(
246+
cartItem = CartItemDetails(
247+
fruittie = Fruittie(
248+
name = "Banana",
249+
fullName = "Banana Banana",
250+
calories = "100",
251+
),
252+
count = 4,
253+
),
254+
increaseCountClick = {},
255+
decreaseCountClick = {}
256+
)
257+
}
258+
}

0 commit comments

Comments
 (0)