개발 일지 πŸ’»/Nutri Capture

Nutri Capture ν”„λ‘ νŠΈμ—”λ“œ - NutrientBottomSheet λΆ€λΆ„ κ΅¬ν˜„

interfacer_han 2025. 3. 26. 21:51

#1 κ°œμš”

 

Nutri Capture ν”„λ‘ νŠΈμ—”λ“œ - 'ν”Όμž' μ•„μ΄μ½˜ μž„μ‹œ 적용

#1 μ»€μŠ€ν…€ μ•„μ΄μ½˜ μž„μ‹œ 적용#1-1 μ»€μŠ€ν…€ μ•„μ΄μ½˜ Nutri Capture ν”„λ‘ νŠΈμ—”λ“œ - 'ν”Όμž' μ•„μ΄μ½˜ κ΅¬ν˜„#1 κ°œμš”#1-1 μ§€κΈˆκΉŒμ§€μ˜ μ—¬μ • Nutri Capture ν”„λ‘ νŠΈμ—”λ“œ - μ»€μŠ€ν…€ BottomSheetScaffold 개발 유예#1 κ°œμš”#1-1 개발 이

kenel.tistory.com

μœ„ κ²Œμ‹œκΈ€μ—μ„œ λͺ»λ‹€ν•œ 뢀뢄을 κ΅¬ν˜„ν–ˆλ‹€. 

 

#2 μ½”λ“œ μŠ€λ‹ˆνŽ«

#2-1 NutritionBottomSheet.kt

...

@Composable
fun NutrientBottomSheet(
    viewModel: NutrientViewModel = hiltViewModel()
) {
    val inputtedDayMeal = viewModel.nutrientScreenState.collectAsState().value.inputtedDayMeal
    val nutritionInfo = inputtedDayMeal.nutritionInfo
    val maxLevel = 5

    LazyVerticalGrid(
        columns = GridCells.Adaptive(minSize = 100.dp),
        modifier = Modifier.fillMaxSize(),
        contentPadding = PaddingValues(12.dp),
        verticalArrangement = Arrangement.spacedBy(12.dp),
        horizontalArrangement = Arrangement.SpaceBetween
    ) {
        items(
            nutritionInfo.toMutableMap().toList()
        ) { nutritionDetailMap ->
            val nutritionKey = nutritionDetailMap.first
            val nutritionDetail = nutritionDetailMap.second

            Column(
                modifier = Modifier
                    .fillMaxSize()
                    .border(width = 1.dp, color = Color.Black),
                verticalArrangement = Arrangement.Center,
                horizontalAlignment = Alignment.CenterHorizontally
            ) {
                ResponsiveArcSurroundedIconButton(
                    imageVector = ImageVector.vectorResource(id = nutritionDetail.iconId),
                    contentDescription = nutritionDetail.name,
                    currentLevel = nutritionDetail.value,
                    maxLevel = maxLevel,
                    arcColor = Color.Yellow,
                    arcWidth = 15
                ) {
                    viewModel.onEvent(
                        NutrientViewModelEvent.UpdateInputtedDayMeal(
                            inputtedDayMeal.copy(
                                nutritionInfo = nutritionInfo.updateNutritionDetail(nutritionKey) {
                                    if (nutritionDetail.value < maxLevel) {
                                        nutritionDetail.value + 1
                                    } else {
                                        0
                                    }
                                }
                            )
                        )
                    )
                }

                Spacer(modifier = Modifier.height(4.dp))

                Text(
                    text = nutritionDetail.name,
                    style = MaterialTheme.typography.labelLarge
                )
            }
        }
    }
}

μ—¬κΈ°μ—μ„œ λ¦¬νŒ©ν† λ§ν•œ NutritionInfo의 getter 및 setterλ₯Ό ν™œμš©ν–ˆλ‹€.

 

#2-2 μž‘λ™ 확인 - μŠ€ν¬λ¦°μƒ·

 

#2-3 μž‘λ™ 확인 - App Inspection

DB에 잘 μ €μž₯된 λͺ¨μŠ΅μ΄λ‹€.

 

#3 λ‹€μŒ λ°©ν–₯

더 예쁘게 λ§Œλ“€κ³  μ‹Άμ§€λ§Œ, 그건 μ΅œμ’…μ μœΌλ‘œ 닀듬을 λ•Œ ν•˜λ©΄ λœλ‹€. λ‹€μŒ μž‘μ—…μ€, BottomSheetλ₯Ό λ™μ μœΌλ‘œ λ‚΄λ¦¬κ±°λ‚˜ 올리게 λ§Œλ“€ 것이닀. κ°„λ‹¨ν•œ μœ μŠ€μΌ€μ΄μŠ€λŠ” μ•„λž˜μ™€ κ°™λ‹€.

 

  1. μ‚¬μš©μžλŠ” μ›λž˜ μ“°λ˜ μ†Œν”„νŠΈ ν‚€λ³΄λ“œλ‘œ μ‹λ‹¨μ˜ 이름을 적음
  2. 'λ‹€μŒ' λ²„νŠΌ 클릭 μ‹œ μ†Œν”„νŠΈ ν‚€λ³΄λ“œλŠ” λ‚΄λ €κ°€κ³  #2-2에 μžˆλŠ” 'NutritionBottomSheet'κ°€ 올라옴
  3. 'NutritionBottomSheet'λ₯Ό 톡해 μ˜μ–‘ 정보λ₯Ό μž…λ ₯
  4. '제좜' λ²„νŠΌ 클릭 μ‹œ DB에 식단이 μ €μž₯됨

'λ‹€μŒ' λ²„νŠΌμ΄λ‚˜ '제좜' λ²„νŠΌμ€ λ”°λ‘œ κ΅¬λΆ„λœ 2개의 λ²„νŠΌμ΄ μ•„λ‹Œ ν•˜λ‚˜μ˜ λ²„νŠΌμ΄λ‹€. λ²„νŠΌμ€ κ·ΈλŒ€λ‘œ 두고 μœ μŠ€μΌ€μ΄μŠ€ 단계 λ³„λ‘œ μ•„μ΄μ½˜λ§Œ λ°”λ€Œκ²Œ λ§Œλ“€ 것이닀.

 

#4 μ™„μ„±λœ μ•±

#4-1 이 κ²Œμ‹œκΈ€ μ‹œμ μ˜ Commit

 

GitHub - Kanmanemone/nutri-capture-new

Contribute to Kanmanemone/nutri-capture-new development by creating an account on GitHub.

github.com

 

#4-2 λ³Έ ν”„λ‘œμ νŠΈμ˜ κ°€μž₯ μ΅œμ‹  Commit

 

GitHub - Kanmanemone/nutri-capture-new

Contribute to Kanmanemone/nutri-capture-new development by creating an account on GitHub.

github.com