액티브 스킬 53

<파이어베이스> 카카오 로그인 + firebase auth 개발 중 functions deploy 에러

🧭 파이어베이스 functions를 활용해서 카카오 로그인을 firebase auth와 연동하고 있습니다. (아래 첨부 유튜브 참고하여 진행) 에러#1 - firebase deploy 실패 예제를 따라하다 함수를 배포하기 위해 $ firebase deploy를 입력하는 순간, 아래와 같은 에러가 발생했습니다. Parsing error: Cannot read file '/users/mies/firebaseprojects/{MyProject}/functions/functions/tsconfig.json' /functions가 2번 반복되는 것이 문제인 것 같은데 해결방법을 찾기 못해 stackoverflow에 질문을 올렸고, 답변 받은 내용으로 .eslintrc.js 파일을 수정하여 다음 단계로 진행하게 되..

액티브 스킬 2023.01.28

<플러터> 안드로이드 네비게이션 스타일 확인하는 방법

🧭 네이게이션 스타일 안드로이드는 일반적으로 '메뉴, 홈버튼, 뒤로가기' 묶음을 가지는 네비게이션 스타일을 가집니다. 하지만 iOS 처럼 스와이프 제스쳐로 설정을 변경할 수 있습니다. 플러터에서 해당 설정을 확인하는 방법 그렇다면 사용자가 버튼 형태의 스타일을 사용하는지 스와이프 제스쳐를 사용하는지 확인할 수 있을까요? 디바이스의 높이를 계산하면 사용자가 어떤 스타일을 사용하고 있는지 파악할 수 있습니다. 디바이스의 실제 높이에서 화면에 사용하는 높이를 빼고 나면 남는 부분이 안드로이드 네비게이션의 높이일 것입니다. 디바이스 실제 높이 디바이스의 실제 높이를 확인하려면 device_info_plus라는 라이브러리가 필요합니다. 해당 라이브러리를 통해 다음과 같이 디바이스 높이를 알 수 있습니다. fina..

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

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

<플러터> 파이어베이스 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

<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

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

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