분류 전체보기 372

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

🧭 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..

<다트> == true, == false 사용하지 마세요

🧭 == true, == false nullable 타입의 변수의 null 여부에 따라 조건문을 분기하는 경우가 있습니다. 첫번째 방법은 변수?.isEmpty == true 처럼 null 인 경우 false가 되도록 판단하는 것입니다. 두번째 방법은 변수?.isEmpty ?? false 처럼 사용하는 것입니다. 저는 두번째 방법을 추천드립니다. 이유는 2가지 입니다. 우선 변수가 null 이면 false 라고 쉽게 파악할 수 있습니다. 첫번째 방법을 사용한 경우 null은 true가 아니니까 false 구나라고 한단계 더 생각해야 합니다. 다음으로 해당 값이 null일 수 없는 경우를 바로 알 수 있습니다. null이 아닌 경우 dart lint 도구가 필요없는 코드라고 hint를 줄 것입니다.

무기/다트 2022.11.17

<플러터> 파이어베이스 iOS 앱 빌드 속도 개선

🧭 iOS 빌드 속도는 안드로이드에 비해 다소 느린 감이 있습니다. 특히, 파이어베이스를 연동하면서 속도가 저하되는데 precomplied SDK를 활용하면 이를 개선할 수 있습니다. root > ios > Podfile 파일에 파이어베이스 버전명을 포함하여 다음과 같은 코드를 추가합니다. pod 'FirebaseFirestore', :git => 'https://github.com/invertase/firestore-ios-sdk-frameworks.git', :tag => '10.0.0' 아래는 위 코드를 반영한 모습입니다. 참고한 사이트에서는 성능을 67% 까지 감소시켰다고 나와 있습니다. 제가 측정한 빌드 시간은 70여초에서 60여초로 크게 체감되는 정도는 아니었습니다. 📌 https://www...

액티브 스킬 2022.11.15

<독서> 내일 - 기욤 뮈소

📖 뻔한 소재와 참신한 전개 과거와 현재를 잇는 이야기 전개를 가지고 있습니다.글이나 영화에서 여러번 다루어진 소재라 자칫 뻔하게 흘러가지 않을까 걱정도 되었습니다.그 걱정은 기우였고 소재가 뻔하더라도 전개는 항상 새로울 수 있겠다는 기대감을 갖게 만들었습니다. http://www.yes24.com/Product/Goods/11575192 내일 - YES24 사랑과 감동의 마에스트로 기욤 뮈소의 명품 스릴러책장을 덮을 때까지 계속되는 숨 막히는 반전의 롤러코스터《내일》은 한국에서 10번째로 출간하는 기욤 뮈소의 장편소설이다. 프랑스 언론 www.yes24.com

클래스/모험가 2022.11.13

<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..

<Android> jCenter vs mavenCentral

🧭 출근해서 개발 중인 앱을 빌드하자마자 에러가 발생했습니다. 'A problem occured configuring project ...' 등등... Gradle 관련 에러라고만 생각해서 한참 삽질을 했습니다. jCenter 관련해서 빌드가 안되고 있다는 상황을 접하게 되었습니다. jCenter jCenter는 플러터의 pub.dev 같은 플러그인 원격 저장소입니다. 해당 사이트가 맛이 갔나 봅니다. 우선 iOS로 작업했습니다. 내일도 같은 상황이 어어진다면 mavenCentral이라는 대안을 사용하고자 합니다. 📌 https://stackoverflow.com/questions/50726435/difference-among-mavencentral-jcenter-and-mavenlocal Differe..

액티브 스킬 2022.10.31

<Dart> 객체의 DateTime 값을 기준으로 정렬

🧭 sort list의 sort 메서드를 활용하면 list를 정렬할 수 있습니다. sort 메서드의 인자로는 비교함수를 대입하게 됩니다. 단순 오름차순/내림차순의 경우에는 비교함수를 생략하고 sort() 메서드의 호출만으로 정렬이 됩니다. sort 메서드는 원본 list를 변경하는 파괴적 메서드입니다. compareTo 정렬 기준이 단순 값이 아닌 객체의 특정 프로퍼티 등인 경우에는 compareTo 함수를 통해 비교하게 됩니다. list.sort((a, b) => a.dateTime.compareTo(b.dateTime)); DateTime 타입은 추가 가공없이 compareTo로 비교 가능합니다. 📌 https://api.flutter.dev/flutter/dart-core/List/sort.html..

무기/다트 2022.10.24