컴포즈를 공부하는 중이라 내용이 정확하지 않고, 부실할 수 있다는 점 양해 바랍니다. 오늘은 간단히 compose에서 사용하는 viewPager 기능과 유사한 기능을 사용함을 써, 앱을 처음 시작할 때 사용자에게 소개하는 가이드 화면을 예시로 만들어 보려고 합니다. 예시로 검은색 화면을 두었습니다. 가이드 화면이 있고, 옆으로 슬라이드 하게 되면 아래 왼쪽에 큰 하얀색점이 작아지고, 오른쪽 점이 커지게 하여, 가이드 페이지의 위치와 개수를 표현하게 됩니다. 사실 여러 viewPager를 찾는 중에 첫 번째 방법은 HorigontalPager라는 페이저 라이브러리였는데, 이러한 편리한 라이브러리도 있구나 정도로 생각을 했고, 두 번째 방법은 굳이 라이브러리를 사용하지 않고도, 만들 수 있는 법이 있었습니다..
3번째 flow 예제 공부를 마쳤다. stateflow, sharedflow, channel에 대한 예제를 꾸렸지만, 모두 클릭 리스너를 달아 데이터를 가져오는데 그친 간단한 예제이지만, 기능보다는 각각의 특징과 공부한 내용들로 주를 이루었다. 우선 코드를 보자. MainViewModel.kt class MainViewModel : ViewModel() { //StateFlow private val _uiState = MutableStateFlow(UiState.Loading) val uiState: StateFlow = _uiState.asStateFlow() //SharedFlow //설정할 수 있다는 것만 보여주기 위함 //아래 설정은 다 기본값 private val _uiShared = Mutab..
flow에는 종료 시점에 후처리 할 수 있는 onCompletion이 존재한다. 우선 코드의 상황은 다음과 같다. useCase를 통해서 서버에 요청하여 list를 불러오는 viewModel의 코드 부분이다. class MainViewModel(private val useCase: UseCase) : ViewModel() { private val _blogList = MutableStateFlow(UiState.Loading) val blogList : StateFlow = _blogList.asStateFlow() private var isLast = false init { viewModelScope.launch { flow{ emit(useCase.getBlogList().toUiBlogList())..
상황은 이렇습니다. 다음과 같이 3개의 EditText가 있고, 이 EditText의 글씨가 모두 써졌으면, 아래 버튼이 활성화되게끔 하려고 합니다. 우선 저는 상태에 따른 모델 값이 필요하다고 생각하여 다음과 같이 UiState를 만들었습니다. UiState.kt data class UiState( val type: EditType? = null, var editState: EditState = EditState.EMPTY ) { enum class EditState { EMPTY, WRITTEN } enum class EditType { NAME, ADDRESS, PHONENUM } }ㅇ UiState는 type: EditType -> EditText의 들어갈 내용에 대한 타입입니다. (NAME, A..
데이터 형식 모델 피드백 이후 변경 사항입니다. 우선 blog 부분입니다. 기존에는 Blog라는 클래스를 두고, 두 개의 클래스 DaumBlog, NaverBlog의 상속시켜 코드를 짰지만, Blog 클래스 자체적인 프로퍼티인 BlogType enum 타입을 통해 Daum과 Naver를 구분 짓도록 변경하였습니다. Blog.kt import kr.loner.shared.BlogType /* * 블로그 데이터 클래스입니다. * id : 고유값 * title : 블로그의 타이틀명입니다. * info : 블로그에 대한 설명글 입니다. * img : view의 표시될 하나의 이미지입니다. * blogUrl : 아이템을 눌렀을 때, 웹뷰로 전달할 url입니다. * type : blog의 종류를 결정하는 타입 값입..
하 정말 감격스러운 순간이다. 앱 개발자를 시작한 이례로 딱 두 번 앱을 출시했다. 첫 번째 앱은 "그만 : 금연 다이어리" 앱이다. 취업을 위한 첫 포트폴리오를 위해 만들었던 앱으로, 정말 한 땀 한 땀 정성스레 만들어 4개월 만에 만들었다. 지금 만들라고 하면, 한 달이면 가능할 것 같다... 하지만 그 앱은 망했다.. 멋진 추억이지만, 사용자수도 10명 안팎이었고, 서버 비용도 들어서.. 그냥 추억은 추억으로 묻어두고 싶어, 앱을 플레이스토어에서 내렸다. 그렇게 시간을 흘러 나는 앱 개발자로서 직장을 다니던 무렵, 요소수 대란이 찾아오게 되었다는 소식을 화물을 하시던 아버지께 들었다. 뭔가 좋은 방법이 없을까 생각하던 중에 혹시나 하고 공공데이터 포털 사이트로 들어가게 된다. 그곳에는 무료로 국가에..
앱 출시일 현재 앱 검토 중이니 느리면 1주일에서 2주일 정도 소요될 것 같습니다ㅠㅠ 빠르면 4일 안에 검토 완료되고 배포 될 것 같습니다. 앱을 만들게 된 계기 시작은 요소수 대란이 일어나고, 운수업을 하시던 아버지께서 부족해진 요소수로 인해, 물량이 있고, 싼 가격에 거점 주유소를 찾기가 힘들어졌고, 화물 운수를 종사하시는 분들이 단톡방을 만들어서 서로 공유를 주고받고 있으시다는 걸 알게 되었다. 그 와중에 나 또한 플러터 회사에서 네이티브로 옮기게 되면서, 한 번 엄청난 기능은 아니지만, 오랜만에 네이티브도 경험할 겸, 도움도 될 겸, 저 데이터들을 편하게 볼 수 있는, 굳이 정부 데이터 사이트 들어가서 정보를 가져오는 번거로움을 줄이고자, 앱을 만들자고 생각이 들었다. 그래서 부리나케 앱을 만들었..
제 1 장 총 칙 제1조 (목적) 이 이용약관(이하 '약관')은 달달한스토리(이하 '회사')와 이용 고객(이하 '회원')간에 회사가 제공하는 금연솔루션 '그만' 서비스(이하 '서비스')의 가입조건 및 이용에 관한 제반 사항과 기타 필요한 사항을 규정함을 목적으로 합니다. 제2조 (이용약관의 효력 및 변경) 1. 이 약관은 서비스를 이용하고 하는 모든 회원에 대하여 그 효력을 발생합니다. 2. 이 약관은 달달한스토리 사이트(daldalhanstory.tistory.com 이하 '달달한스토리 블로그')에 온라인으로 공시됨으로써 효력이 발생되고, 합리적인 사유가 발생할 경우 회사는 관계법령에 위배되지 않는 범위에서 이 약관을 변경할 수 있습니다. 3. 개정약관도 달달한스토리 블로그에 온라인으로 공시됨으로써 효..
('https://daldalhanstory.tistory.com'이하 '달달한스토리')은(는) 「개인정보 보호법」 제30조에 따라 정보주체의 개인정보를 보호하고 이와 관련한 고충을 신속하고 원활하게 처리할 수 있도록 하기 위하여 다음과 같이 개인정보 처리방침을 수립·공개합니다. 제1조(개인정보의 처리목적) (이)가 개인정보 보호법 제32조에 따라 등록․공개하는 개인정보파일의 처리목적은 다음과 같습니다. 1. 개인정보 파일명 : 금연 이용자 개인정보의 처리목적 : 금연 이용자들의 금연기록과 금연 프로필, 금연 기록등을 저장하기 위함. 수집방법 : 회원가입을 통해 보유근거 : 로그인을 통한 정보 호출. 보유기간 : 회원탈퇴시까지 (메일로 탈퇴요청시) 관련법령 : 신용정보의 수집/처리 및 이용 등에 관한 기..
2021년 3월 30일 기준으로 금연한 지 166일이 된 금연새내기 개발자입니다. 금연을 하면서, 이런 점이 있었으면 좋겠다고 생각했던 점들을 참고해서 금연 앱을 부족하게나마 만들어 보았습니다. 첫 앱 개발이라 부족한 점이 많지만, 잘 부탁드립니다. 부족한 점, 피드백 모두 수용하겠습니다. 모두 함께 금연에 성공하셨으면 좋겠습니다. 저도 같이 금연에 동참하며, 추후에 지속적인 업데이트를 올리겠습니다! "중요한 건 실패가 아니라, 다시 도전하는 것입니다." - GMAN -