Flutter Webview를 사용하려고 합니다. 정상적인 웹앱 연동을 위해서는 크게 3가지의 기능이 필요합니다. 1. 로그인 유지 2. App -> Web 호출 3. App 앱에서 이미 로그인을 했는데, 웹뷰에서 또 로그인을 시키면 불편합니다. 따라서 보통은 앱에서 가지고 있는 인증토큰 (access_token)을 웹뷰의 header로 보내고 서버에서 사용자 로그인 처리를 해주는 방법으로 많이 합니다. (🤔 보통이라 함은.. 제가 많이 경험해본 것이니 꼭 보편적이라고는 단언할 수 없습니다.)App과 Web의 통신도 상당이 중요합니다. 앱에서 웹 페이지에 동적으로 특정 요청을 해야 하는 경우가 있을 수 있고, 웹에서 특정 동작 시점에 앱에게 정보를 전달해줘야 하는 경우가 있습니다. (예를들어, 설문조사..
Mvvm Clean Architecture에서 원론적으로는 3가지 레이어로 나뉘게 됩니다. 1. Presentation2. Domain3. Data 위에서 Google Clean Architecture 에서는 Domain 생략을 허용합니다.나는 그 입장에 동의하고, 2가지 레이어인 Presentation 과 Data 레이어로 구성된 흐름도를 Flutter 앱 아키텍처 가이드로 활용하고 있습니다. 1. Presentation 레이어 안에는 View와 ViewModel 이 있습니다. 2. Data 레이어에는 Repository와 Service가 있습니다. (Service는 flutter retrofit 라이브러리에서 api interface 선언부라고 할 수 있다. 안드로이드 개발의 Retrofit Serv..
Flutter 에서 화면 전환 관련해서 go_router 라이브러리를 많이 사용하고 있다. 그래서 go_router를 사용하였는데, 생각보다 매개변수를 화면에 전달하는 과정이 불편하고 문제가 많이 보였다. 내가 개선하고 싶은 부분🤔 화면에 매개변수 전달 시, 자동으로 관련 파라미터 전달 인터페이스를 생성해주는 라이브러리는 없을까? ‼ auto_route 라는 라이브러리 발견!AS-IS (go_router)context.push(ExerciseCheckScreen.routePath, extra: { ExerciseCheckScreen.extraKeyScreenType: ExerciseScreenType.DISCOMFORT, ExerciseCheckScreen.extraKeyDailyPlanId: pl..
예시 코드 시나리오: 아래의 4개 버튼 클릭 시, progress bar 보여주고 2초후에 text 변경과 함께 progress bar 가 사라진다. child: Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ Builder(builder: (_) { if (loadedData == null) { return const SizedBox(); } if (loadedData!.isEmpty) { return const CircularProgressIndicator(); } return Text(loadedData!); }), const SizedBo..
Spinner란 왼쪽뷰이고 오른쪽 DropDown 리스트를 손쉽게 붙일 수 있게 해준다. (Spinner + ArrayAdapter) 사실 요즘은 AutoCompleteTextView 에 ArrayAdapter를 연결하는 방식으로 많이 쓰고 있다. 다만, 오래된 코드의 경우 Spinner 를 사용하는 경우가 종종 있으니 알아는 둬야겠지.. 커스터마이징 하고자 했던 것은 DropDown 아이템을 클릭했을 때 리스너를 붙이는 것이었다. 그러기 전에 일단 Spinner 와 AutoCompleteTextView 에서 ArrayAdapter의 동작 차이점을 살펴보자. Spinner vs AutoCompleteTextView Spinner binding.spinner.onItemSelectedListener = o..
특정한 뷰의 가로 세로 비율을 특정 값으로 조정하고 싶은 경우가 있다. 어떠한 방법들이 있을까? 가로 세로 비율을 1: 0.61 (세로 길이 = 가로길이 * 0.61) 로 지정한다는 가정하에 코드를 살펴보겠다. 1. Programatically 하게 적용하기 binding.ivCompany.viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener { override fun onGlobalLayout() { binding.ivCompany.viewTreeObserver.removeOnGlobalLayoutListener(this) binding.ivCompany.layoutParams.height =..
안드로이드 개발자들은 이제 Clean Architucture MVVM 패턴을 대부분 알고 있고 공통적인 개발 방향에 대해서 논의할 수 있을 정도의 기술 전파가 되었다고 본다. 그래서 다른 사람들의 코드를 보더라도 예전처럼 구조 파악이 안되는 경우가 많이 없어졌다. 하지만 과연 MVVM 아키텍처를 완벽하게 구현하고 있는 회사는 얼마나 될까? 모두 제각각 자기 회사의 레거시 코드, 개발자 인원, api 규격 등에 의해서 맞춤형 MVVM 패턴을 적용하고 있을거라고 생각된다. 사이드 프로젝트에는 내가 이해한 MVVM 패턴을 문제 없이 구현할 수 있다. 하지만 회사 코드는 내가 하고 싶은데로 할 수가 없어.. 내가 오늘 정리하고자 하는 것은 이렇다. Clean Architecture는 크게 2가지로 구분되고 있다..