액티브 스킬/플러터 36

<플러터> 인앱업데이트 - 강제업데이트 후 재실행 안될 때

🧭 in_app_update 안드로이드 강제업데이트를 위해 인앱업데이트를 지원하는 in_app_update 라이브러리를 사용해 보았습니다. 업데이트 옵션으로 강제업데이트, 선택업데이트가 있습니다. 강제업데이트 시에는 업데이트 후 앱이 자동으로 재실행되어야 하지만 재실행 없이 종료만 되었습니다. singleTop vs singleTask AndroidManifest.xml 파일을 보면 아래로 다음과 같은 옵션이 있습니다. android:launchMode="singleTop" 해당 옵션을 singleTop에서 singleTask로 변경해주면 강제업데이트 후 앱이 재실행됩니다. android:launchMode="singleTask" singleTop과 singleTask의 차이점은 아래 두번째 링크를 참고..

<플러터> showDialog context 에러: Get.context, nullable

상황 showDialog 호출할 때 Get.context로 context 불러오는 중 null 체크 에러 발생 해결 MaterialApp을 GetMaterialApp으로 교체 참고 https://github.com/jonataslaw/getx/issues/695 Get.context is null during unit tests · Issue #695 · jonataslaw/getx I am using mobx for state management and before adding get package to my project, I was passing the context to each action I needed to. Now by the help of Get.context, I remove all t..

<플러터> StatefulBuilder

🧭 다이얼로그 안에서 setState 사용하기 StatefulWidget 내에서 다이얼로그를 띄우고, 다이얼로그의 상태를 변경하기 위해 setState를 사용하였으나 상태가 변경되지 않았습니다. 다이얼로그에서 setState를 썼을때 다이얼로그를 제외한 StatefulWidget의 상태가 업데이트가 되는걸까 라는 추측을 하게 되었습니다. 맞았습니다. 다이얼로그에서 StatefulBuilder를 통해 위젯을 만들어야 다이얼로그 내의 상태를 변경할 수 있었습니다. 공홈에서는 전체 위젯을 rebuild하지 않고 특정 부분만 rebuild하기 위한 용도로 설명하고 있습니다. 📌 https://changjoopark.medium.com/flutter-dialog-%EC%95%88%EC%97%90%EC%84%9C-..

<플러터> iOS에서 SafeArea 적용으로 발생하는 하단 여백 색상 변경

🧭 SafeArea 플러터에서는 모바일 화면 상단의 상태바, iOS 하단의 노치 등의 공간을 제외하고 작업하기 위해 SafeArea 위젯을 사용합니다. 한편 전체를 차지하는 화면이 아닌 화면의 일부, 그 중에서도 하단의 일부를 차지하는 위젯에 SafeArea를 적용하는 경우 배경 색상이 원하는 색상이 아닌 경우가 있습니다. 전체 화면에 적용된 색상과 하단의 일부를 차지하는 해당 위젯의 배경 색상이 다른 경우에 SafeArea로 띄어진 하단의 노치 부분은 전체 화면의 배경 색상을 가지고 있을 것입니다. 하단의 일부를 차지하는 위젯의 배경 색상을 그대로 적용하기 위해서는 SafeArea로 감싼 부분을 다시 Container 위젯으로 감싸고, color 값을 원하는 색상으로 설정해 주면 됩니다. 📌 https..

<Flutter> dynamic 변수의 타입 확인

🧭 변수의 타입을 왜 확인해야 하는가? 모든 변수를 정적 타입으로 선언했다면 타입을 확인할 필요가 없을 것입니다. 오래된 프로젝트를 업그레이드 한다든지 하는 경우 dynamic 타입의 변수를 마주할 수 있고 타입을 확인하고 싶은 경우가 있을 수 있습니다. 플러터의 모든 변수들의 조상격인 Object 타입에는 runtimeType이라는 프로퍼티가 있습니다. 어떤 변수든 runtimeType 프로퍼티를 불러와서 출력하면 타입을 확인할 수 있습니다. dynamic variable; print(variable.runtimeType); // dynamic 📌 https://www.kindacode.com/article/how-to-check-type-of-a-variable-in-flutter/ How to ch..

<Flutter> SliverFillRemaining - 스크롤뷰 내부 위젯들이 높이를 가득채우지 못할 경우 나머지를 채우는 방법

🧭 CustomScrollView 스크롤뷰가 포함하는 자식 위젯들의 형태(높이 등)를 원하는 대로 수정하기 위해 CustomScrollView를 사용합니다. CustomScrollView는 Sliver로 시작하는 몇개의 위젯들을 자식으로 가질 수 있습니다. SliverFillRemaining 그 중에 SliverFillRemaining을 다뤄보고자 합니다. 위젯들의 전체 높이가 화면을 초과하는 경우 가장 쉽게 생각할 수 있는 방법은 전체 위젯을 SingleChildScrollView로 감싸는 것입니다. 그런데 표현하는 내용에 따라 위젯들의 전체 높이(노란색)가 화면의 일부만 채우는 경우 어떻게 될까요? 아래 이미지의 하단과 같이 흰 여백이 생길 것입니다. 이 여백을 채우기 위해서는 SingleChildS..

<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 이 방법을 사용하면 현재 사용중인 컴퓨터의 모든 플러터 프로젝트에 영향을 받..