#1 ๊ฐ์
๋ ์ฝ๋๋ฅผ INSERTํ๋ ๋ฒํผ๊ณผ DELETEํ๋ ๋ฒํผ์ ๊ฐ๊ฐ ๊ตฌํํ๋ค.
#2 ์ฝ๋ - ๊นจ์ ์์
...
@Composable
fun NutrientScreen(
...
) {
...
LazyColumn(
...
) {
...
itemsIndexed(...) { ... ->
Card(
...
elevation = CardDefaults.cardElevation(4.dp)
) {
...
}
}
}
}
๋ ์ฝ๋ ํ๋ํ๋๋ฅผ ๊ฐ์ธ๋ Card์ ๊ทธ๋ฆผ์๊ฐ์ ์ค์ธ๋ค. ๊ทธ๋ฆผ์๊ฐ์ด 8.dp๋ฉด ๋ค๋ฅธ ์นด๋ ์์ญ์๊น์ง ๊ทธ๋ฆผ์๊ฐ ์นจ๋ฒํด๋ฒ๋ฆฌ๊ธฐ ๋๋ฌธ์ด๋ค.
TMI
์ง๊ธ์ ๊ธฐ๋ฅ ๊ตฌํ ์์ฃผ๋ก๋ง ๊ฐ๋ฐํ๋ค. ์ฌ์ฉ์์ ๋ง์กฑ๊ฐ์ ๋์ด์ฌ๋ฆฌ๊ธฐ ์ํ ์๊ฐ์ ์์ ์ ๋งํ์ ๋ชฐ์์, ํ๋ก ํธ์๋๋ฅผ ์์ ํ ๊ฐ์์๋ ๋ฐฉ์์ผ๋ก ์ํํ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ ์ด๋ฐ ๊นจ์ ๊ฐ์ ์์ ์ฌํญ์ ํฐ ์๋ฏธ๋ ์๋ค. ๋ค๋ง ๊ณผ์ ์ด ๋ณด๊ธฐ ์ข๊ณ ์ฆ๊ฑฐ์์ผ ๋ ๋ชฐ์ ๋๊ณ , ํ๋ก์ ํธ์ ์ ์ ๋ ์๊ธธ ๊ฒ์ด๋ค.
#3 ์ฝ๋ - INSERT ๋ฒํผ
#3-1 ๋ชจ์ ์ก๊ธฐ
...
@Composable
fun NutrientScreen(
...
) {
...
LazyColumn(
...
reverseLayout = true
) {
item {
FilledTonalButton(
onClick = {
// TODO
},
modifier = Modifier
.fillMaxWidth()
.padding(
start = 8.dp,
top = 0.dp,
end = 8.dp,
bottom = 8.dp
),
shape = CardDefaults.shape,
elevation = ButtonDefaults.filledTonalButtonElevation(4.dp)
) {
Text(
text = "+",
fontSize = 30.sp
)
}
}
...
itemsIndexed(...) { ... ->
...
}
}
}
LazyColumn์ item { ... } ์์ญ์ ์ ์ธํ๊ณ , ๊ทธ ์์ FilledTonalButton์ ๋ฃ๋๋ค. LazyColumn์ reverseLayout ํ๋กํผํฐ์ true๋ฅผ ๋์ ํ์ผ๋ฏ๋ก, ์์ดํ ๋ค์ ์ญ์์ผ๋ก ์ ๋ ฌ๋๋ค. ๋ฐ๋ผ์, LazyColumn ๋งจ ์ฒซ ๋ถ๋ถ์ ์ ์ธ๋ ์ด FilledTonalButton์ LazyColumn์ ๋งจ ์๋ซ ๋ถ๋ถ์ ์กด์ฌํ๊ฒ ๋ ๊ฒ์ด๋ค.
๋ DayMeal ๋ ์ฝ๋ ํ๋ํ๋๊ฐ Card์ ๋ด๊ฒจ์๊ธฐ ๋๋ฌธ์ ํต์ผ์ฑ์ ์ํด์, FilledTonalButton์ shape ํ๋กํผํฐ์ CardDefaults.shape๋ฅผ ๋์ ํ๋ค. ์ฆ, FilledTonalButton์ ์นด๋ ๋ชจ์์ด ๋ ๊ฒ์ด๋ค.
#3-2 ํด๋ฆญ ์ ๋์ ์ ์
...
@Composable
fun NutrientScreen(
...
) {
...
/* ↓↓↓ viewModel.onEvent(...) ๋ถ๋ถ์ ๋ณต์ฌใ๋ถ์ฌ๋ฃ๊ธฐ ํ LaunchedEffect ์ญ์
LaunchedEffect(key1 = true) {
repeat(5) {
viewModel.onEvent(
NutrientViewModelEvent.InsertMeal(
meal = Meal(
time = LocalTime.now(),
name = "test",
nutritionInfo = NutritionInfo()
),
date = LocalDate.now()
)
)
}
}
*/
...
LazyColumn(
...
) {
item {
FilledTonalButton(
onClick = {
viewModel.onEvent(
NutrientViewModelEvent.InsertMeal(
meal = Meal(
time = LocalTime.now(),
name = "test",
nutritionInfo = NutritionInfo()
),
date = LocalDate.now()
)
)
},
...
) {
...
}
}
...
itemsIndexed(...) { ... ->
...
}
}
}
onClick = { ... } ์์ 'NutrientScreen ์คํ ์ ๋ง๋ค ๋ ์ฝ๋๋ฅผ 5๊ฐ์ฉ INSERT์์ผฐ๋ LaunchedEffect'์ INSERT ์ด๋ฒคํธ๋ฅผ ๋ณต์ฌใ๋ถ์ฌ๋ฃ๊ธฐ ํ๋ค. 'NutrientScreen ์คํ ์ ๋ง๋ค ๋ ์ฝ๋๋ฅผ 5๊ฐ์ฉ INSERT์์ผฐ๋ LaunchedEffect'๋ ์ด์ ํ์๊ฐ ์์ผ๋ฏ๋ก ์ญ์ ํ๋ค.
#4 ์ฝ๋ - DELETE ๋ฒํผ
#4-1 ๋ชจ์ ์ก๊ธฐ
...
@Composable
fun NutrientScreen(
...
) {
...
LazyColumn(
...
) {
item {
...
}
...
itemsIndexed(dayMeals) { index, dayMeal ->
Card(
...
) {
Box(
modifier = Modifier.fillMaxSize()
) {
Column(
...
) {
...
}
IconButton(
onClick = {
// TODO
},
modifier = Modifier.align(Alignment.TopStart)
) {
Icon(
imageVector = Icons.Default.Delete,
contentDescription = "Delete",
modifier = Modifier.size(24.dp)
)
}
}
}
}
}
}
Column์ Box์ ๋ฃ๊ณ , IconButton๋ฅผ Box์ TopStart ๋ถ๋ถ์ ์ถ๊ฐํ๋ค.
#4-2 ํด๋ฆญ ์ ๋์ ์ ์
...
@Composable
fun NutrientScreen(
...
) {
...
LazyColumn(
...
) {
item {
...
}
...
itemsIndexed(dayMeals) { index, dayMeal ->
Card(
...
) {
Box(
modifier = Modifier.fillMaxSize()
) {
Column(
...
) {
...
}
IconButton(
onClick = {
viewModel.onEvent(
NutrientViewModelEvent.DeleteDayMeal(
dayMeal = dayMeal
)
)
},
modifier = Modifier.align(Alignment.TopStart)
) {
Icon(
imageVector = Icons.Default.Delete,
contentDescription = "Delete",
modifier = Modifier.size(24.dp)
)
}
}
}
}
}
}
์ด์ ๊ฒ์๊ธ์์ ๋ง๋ค์๋ DeleteDayMeal() ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํ๋ค.
#5 ์์ฑ๋ ์ฑ
#5-1 ์คํฌ๋ฆฐ์ท

#5-2 ์ด ๊ฒ์๊ธ ์์ ์ Commit
GitHub - Kanmanemone/nutri-capture-new
Contribute to Kanmanemone/nutri-capture-new development by creating an account on GitHub.
github.com
#5-3 ๋ณธ ํ๋ก์ ํธ์ ๊ฐ์ฅ ์ต์ Commit
GitHub - Kanmanemone/nutri-capture-new
Contribute to Kanmanemone/nutri-capture-new development by creating an account on GitHub.
github.com
'๊ฐ๋ฐ ์ผ์ง ๐ป > Swemo' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| Nutri Capture - ์ด์ง ํ์ ์ ์ฉ (1) | 2024.12.17 |
|---|---|
| Nutri Capture - item ์ถ๊ฐใ์ ๊ฑฐ ์ ๋๋ฉ์ด์ (0) | 2024.12.15 |
| Nutri Capture - DeleteDayMeal ์ด๋ฒคํธ ์ถ๊ฐ (0) | 2024.11.28 |
| Nutri Capture - DAO ์ ๋ ผ๋ฆฌ์ ์ค๋ฅ ์์ (0) | 2024.11.26 |
| Nutri Capture - ๋ฌดํ ์คํฌ๋กค ๋ก์ง ๋ฆฌํฉํ ๋ง (1) | 2024.11.16 |