액티브 스킬 53

<Flutter: 실험실> initState 안에서 비동기 함수 호출하기

🧭 initState 내에서 비동기 함수를 호출한다면? Flutter의 StatefulWidget은 initState, dispose 같은 메서드를 오버라이드해서 사용하게 됩니다. 다만, API 통신과 같은 비동기 함수를 initState 안에서 호출하면 아래와 같은 에러가 발생합니다. 비동기 함수 외부에서 정의 initState 메서드 내에서 비동기 함수를 호출할 수 없기 때문에, 아래와 같이 async/await를 생략한 비동기 함수를 사용하는 예제를 종종 접합니다. TRANSLATE with x English Arabic Hebrew Polish Bulgarian Hindi Portuguese Catalan Hmong Daw Romanian Chinese Simplified Hungarian Rus..

<Flutter> GetX 화면 전환이 안되는 경우

🧭 Get.toNamed GetX로 route를 관리한다면 Get.toNamed를 사용해서 페이지를 전환하게 됩니다. 이 때 GetX는 사용자의 이중 클릭 등으로 페이지를 2번 호출하지 않도록 같은 페이지에 재진입을 막도록 되어 있습니다. preventDuplicates 재진입을 막는 속성은 preventDuplicates로 페이지에 재진입을 허용하고 싶은 경우 해당 프로퍼티를 false 값으로 반영하면 됩니다. TRANSLATE with x English Arabic Hebrew Polish Bulgarian Hindi Portuguese Catalan Hmong Daw Romanian Chinese Simplified Hungarian Russian Chinese Traditional Indonesi..

<Flutter> Positioned Widget 너비 100% 설정하는 법

🧭 Positioned Widget Stack 위젯의 child 위젯으로 positioned widget을 사용합니다. Stack 안에서 특정 위치에 위젯을 둘 수 있습니다. 너비 100%로 설정하기 positioned widget 내에서 container 위젯을 사용하는 경우 width 속성에 double.infinity를 넣어줘도 너비가 변경되지 않습니다. positioned widget의 너비를 변경하기 위해서는 left, right 속성에 값을 0(또는 원하는 간격)으로 입력하면 너비를 변경할 수 있습니다.

<Flutter> 플러터 SDK 버전 다운그레이드

🧭 Flutter SDK 다운그레이드 프로젝트를 진행하다보면 특정 시점의 플러터 버전을 유지해야 하는 경우가 있습니다. 시간적 여유가 있다면 플러터 업그레이드를 주기적으로 하고 그에 따른 문제들을 차근차근 해결하면 됩니다. 하지만 당장 요구사항들도 해내기 어려운 마당에 무턱대고 flutter upgrade를 해버리면 버전에 따른 버그를 잡아내느라 시간을 허비하게 될 수도 있습니다. 플러터의 버전을 변경할 2가지 방법을 살펴보겠습니다. 1. 플러터 SDK git history 활용 첫번째 방법은 플러터 sdk가 설치된 경로로 이동하여 원하는 버전의 commit을 checkout 하는 것입니다. $ git checkout 2.2.2 이 방법을 사용하면 현재 사용중인 컴퓨터의 모든 플러터 프로젝트에 영향을 받..

<Flutter> ListView 내 Stack 위젯의 child가 다음 ListViewItem에 가려질 때

🧭 어떤 경우에? ListView 내 ListViewItem이 Stack 위젯을 가지고 Stack 위젯에 사용자 이벤트가 발생했을 때 숨겨둔 Positioned 위젯 등을 노출시킬 수 있습니다. 이 때 노출된 위젯의 높이가 부모 위젯의 높이를 초과하는 경우 다음번 나오는 ListViewItem에 가리게 됩니다. 높이를 초과하는 부분을 가리지 않고 그대로 드러내려면 어떻게 해야 할까요? 어떻게? OverlayEntry, CompositedTransformFollower 등을 조합하여 이를 구현할 수 있습니다. 📌 https://blog.logrocket.com/complete-guide-implementing-overlays-flutter/ Implementing overlays in Flutter - L..

<Flutter> ListViewItem 내 버튼을 누르는 경우 특정 위젯 보이기/숨기기

🧭 어떤 경우에? ListView 내 ListViewItem에서 버튼을 누르는 경우 별도의 위젯을 보였다가 숨겼다가 하고 싶은 경우가 있습니다. 가령 인스타그램, 트위터 같이 피드들을 리스트 형식으로 보여주는 앱에서 점 3개짜리 버튼을 누르면, 메뉴 선택 창이 화면위의 특정 위치를 차지하는 경우가 있을 것입니다. 어떻게? isVisible 같은 bool 타입의 변수를 만들어서 값을 저장해 두면 될 것 같습니다. 이 변수를 어디에서 정의해야 할까요? 상태가 변해야 하니까 StatefulWidget을 활용해야 겠습니다. ListView를 포함하는 부모 위젯을 StatefulWidget으로 정의하고 싶겠지만 그렇게 했다간 상태가 변할 때마다 부모 위젯도 매번 다시 그려지면서 상태가 초기화되는 안타까운 경험을 ..

<Flutter> font_awesome_flutter 패키지 - 아이콘 팩

🧭 Font Awesome 플러터의 기본 제공 아이콘 말고 새로운 아이콘을 적용해 보고 싶지 않으신가요? font_awesome_flutter 패키지를 설치하면 됩니다! 패키지를 설치하면 아이콘 아카이브(?)로 유명한 fontawesome.com 사이트에서 제공하는 무료 아이콘을 활용할 수 있습니다. 📌 https://pub.dev/packages/font_awesome_flutter font_awesome_flutter | Flutter Package The Font Awesome Icon pack available as Flutter Icons. Provides 1600 additional icons to use in your apps. pub.dev

<Flutter> BottomNavigationBar 상하 기본 여백 제거하기

🧭 selectedFontSize showSelectedLabels 프로퍼티에 false를 입력하면 bottomNavigationBarItem의 라벨을 숨길 수 있지만, 여전히 여백을 차지하고 있습니다. BottomNavigationBar를 그대로 사용한다면 당장 문제될 것은 없습니다. 다만, BottomNavigationBar의 높이를 변경한다든지 하는 변경을 가할 경우 내부의 아이콘이 범위를 초과하는 에러가 발생할 수 있습니다. 우리는 margin 혹은 padding 값을 준 적이 없기 때문에 당황스러울 수 있습니다. 이 때 selectedFontSize 값을 0으로 주면 해당 에러가 사라지는 것을 확인할 수 있습니다. 📌 https://api.flutter.dev/flutter/material/Bo..

<Flutter> native_splash 라이브러리로 스플래시 스크린 간단하게 만들기

🧭 splash screen 앱을 처음 열면 기본적인 화면구성을 위해 로딩 시간이 발생합니다. (앱이 구동 전인 경우 콜드 스타트, 앱이 구동을 시작했으나 화면이 그려지는 중인 경우 웜 스타트라고 함) 이 때 사용자에게 브랜드 로고 등을 노출하는 화면을 스플래시 스크린이라고 합니다. 플러터에서 해당 화면을 구현하더라도 플러터가 네이티브 앱에 올라가는 동안은 하얀 화면을 노출할 수 밖에 없습니다. 이 때 flutter_native_splash 패키지를 활용하면 플러터가 네이티브 위로 올라가는 시간에도 스플래시 스크린을 적용할 수 있습니다. flutter_native_splash 1. 패키지 설치 $ flutter pub add flutter_native_splash --dev ※ 스플래시 스크린의 종료 시..

<Flutter> dio / retrofit / freezed

🧭 플러터에서 HTTP 통신을 위한 기본적인 방법으로 dio 패키지를 사용할 수 있습니다. retrofit은 dio를 조금 더 쉽게 사용할 수 있도록 하는 패키지입니다. freezed는 데이터 모델을 쉽게 생성해주는 패키지입니다. 아키텍처 레이어를 기준으로 구분해 보겠습니다. Network - API - retrofit (dio) Data - dto - freezed Domain - usecase - ?? 어렵다 어려워.. 공부해서 보충하겠습니다..