개발 일지/Nutri Capture 46

Nutri Capture 프론트엔드 - NutrientBottomSheet 부분 구현

#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...@Composablefun NutrientBottomSheet( viewModel: NutrientViewModel = hiltViewModel()) { val inputtedDayMeal = viewModel.nutrie..

Nutri Capture 백엔드 - NutritionInfo 리팩토링

#1 문제점#1-1 리팩토링할 기존 코드package com.example.nutri_capture_new.dbimport androidx.room.ColumnInfodata class NutritionInfo( // 과식 정도값 @ColumnInfo(name = "overeating_excess") var overeatingExcess: Int = 0, // 정제당 섭취 정도값 @ColumnInfo(name = "refined_sugar_excess") var refinedSugarExcess: Int = 0, // 정제 곡물 섭취 정도값 @ColumnInfo(name = "refined_grain_excess") var refinedGrainExcess..

Nutri Capture 프론트엔드 - '피자' 아이콘 임시 적용

#1 커스텀 아이콘 임시 적용#1-1 커스텀 아이콘 Nutri Capture 프론트엔드 - '피자' 아이콘 구현#1 개요#1-1 지금까지의 여정 Nutri Capture 프론트엔드 - 커스텀 BottomSheetScaffold 개발 유예#1 개요#1-1 개발 이유말로 설명하기 힘들지만, BottomSheetScaffold의 내부 코드를 살짝만 바꾸면 내가 원하는 동kenel.tistory.com이전에 만든 아이콘이다. 만들었으니, 우선 본 프로젝트에 적용부터 해봤다. #1-2 임시 적용 코드...@Composablefun NutrientBottomSheet( viewModel: NutrientViewModel = hiltViewModel()) { val inputtedDayMeal = view..

Nutri Capture 프론트엔드 - '피자' 아이콘 구현

#1 개요#1-1 지금까지의 여정 Nutri Capture 프론트엔드 - 커스텀 BottomSheetScaffold 개발 유예#1 개요#1-1 개발 이유말로 설명하기 힘들지만, BottomSheetScaffold의 내부 코드를 살짝만 바꾸면 내가 원하는 동작을 구현할 수 있었다. 그렇다고 internal이나 private 접근 지정자가 붙은 내부 코드를 내kenel.tistory.com위 게시글에서 보듯, 원래는 영양 정보 입력을 위한 커스텀 키보드를 만들기로 했었다. 이 커스텀 키보드는 BottomSheetScaffold의 BottomSheet에 들어갈 예정이었다. 순정 BottomSheetScaffold로는 내가 원하는 동작을 구현할 수 없다. 그래서 커스텀 BottomSheetScaffold를 만들..

Nutri Capture 프론트엔드 - 커스텀 BottomSheetScaffold 개발 유예

#1 개요#1-1 개발 이유말로 설명하기 힘들지만, BottomSheetScaffold의 내부 코드를 살짝만 바꾸면 내가 원하는 동작을 구현할 수 있었다. 그렇다고 internal이나 private 접근 지정자가 붙은 내부 코드를 내가 커스텀할 수도 없는 노릇이었다. public한 함수들로 구현도 할 수 있는 모든 걸 해봤다. 결국 깊숙히 파고들어본 결과, 반드시 내부 코드를 바꿔야만 내가 원하는 동작을 구현할 수 있다는 걸 깨달았다. 정확히는, NestedScrollConnection의 기제를 알게되고나서 깨달았다. 순정 BottomSheetScaffold에 가해지는 사용자의 터치 입력(Pointer input)은 최상위 부모(인 내부 코드)까지 올라가는데, 이를 막을 방법이 없다는 걸 알게된 것이다...

Nutri Capture 백엔드 - Hilt 도입

#1 개요#1-1 Hilt 도입계획표 상, Hilt 도입은 끝자락 단계였다. 하지만, 코드를 짜가며 앱을 구현해나가는 데에 여러 상용구 코드들이 나를 거슬리게 했다. Hilt로 현존하는 상용구 코드 그리고 잠재적으로 발생할 상용구 코드들을 선제적으로 제거하는 편이 더 좋을 것이란 판단을 내렸다. #1-2 기반 (레퍼런스) [Android] Dagger2 - Hilt로 마이그레이션#1 Hilt 개요 Hilt를 사용한 종속 항목 삽입  |  Android Developers이 페이지는 Cloud Translation API를 통해 번역되었습니다. Hilt를 사용한 종속 항목 삽입 컬렉션을 사용해 정리하기 내 환경설정을 기준으kenel.tistory.com위 게시글에 기반해, 본 안드로이드에 Hilt를 도입한..

Nutri Capture 프론트엔드 - windowInsetsPadding()

#1 문제 상황Scaffold의 bottomBar 속에 Row(). 그 Row() 속에 TextField()가 있는 구조다. TextField()를 클릭하면 소프트키보드가 Row() 직전까지 올라오는 걸 의도했으나, 실제로는 Row()의 영역을 침범하여 TextField() 직전까지 올라온다. #2 코드 스니펫Scaffold( modifier = Modifier .fillMaxSize() .windowInsetsPadding(WindowInsets.ime), // Modifier에  windowInsetsPadding()을 추가하면, 시스템 UI (여기서는 ime(가상키보드)) 영역에 가려지지 않게 된다. 주의할 점은, windowInsetsPadding()을 반드시 Sca..

Nutri Capture - 코드 정리

#1 개요코드 최적화를 하기 앞서 당장 필요없는, 계륵과도 같은 코드 전부 제거했다. 일론 머스크의 사고법에 의하면, "이건 결국 다시 넣어야 할 것 같은데?"라는 생각이 들지 않으면 충분히 제거하지 않은 것이므로 정말 철저하게 제거했다. #2 코드 스니펫#2-1 위임 프로퍼티 [Kotlin] 위임 프로퍼티 (Delegated properties)#1 Delegated properties#1-1 개요 Delegated properties | Kotlin kotlinlang.org위임 프로퍼티는, getter와 setter 로직을 다른 클래스에 위임(delegate)하는 코틀린 프로퍼티를 의미한다. 본 게시글에서는 위임 프로퍼kenel.tistory.com위와 같이 위임 프로퍼티에 대해 공부해놓고 정작 프..

Nutri Capture 프론트엔드 - 아이콘 제작 (1차)

#1 개요#1-1 일정 Nutri Capture 방향성 - 개발 일정표 (1차)#1 현 개발 행태에 대한 문제점#1-1 과정의 완벽주의난 풋내기 프로그래머에 불과하다. 내가 만들 앱 또한 그저 그런 앱일 것이다. 적어도 처음 (출시할 의도로 만드는) 앱을 당연히 그럴 것이다,kenel.tistory.com이전 게시글에서 'ChatBar를 통해 전송한 MealItem의 name 속성을 LazyColumn에서 확인'할 수 있었다. 이제 다음 작업은 계획표 상, 'nutritionInfo 각 프로퍼티에 1대1로 대응되는 아이콘을 가져오거나 제작함'이다. #1-2 아이콘아이콘을 어디에서 일괄적으로 다운로드하는 걸 생각했지만, 아이콘 간 통일성이 떨어진다는 문제점이 있다. 그래서 직접 그리기로 했다. 물론, 너무..

Nutri Capture 백엔드 - StateFlow로 전환

#1 개요#1-1 State에서 StateFlow로 마이그레이션 [Kotlin] Coroutines Flow - StateFlow#1 개요 StateFlowA SharedFlow that represents a read-only state with a single updatable data value that emits updates to the value to its collectors. A state flow is a hot flow because its active instance exists independently of the presence of collectokenel.tistory.com위 게시글을 참조하여 프로젝트를 업데이트했다. #1-2 StateFlow 업데이트이전 게시글의 문제점을 ..