플러터 14

[다트] enhanced enum - String 값으로 Enum 값 얻기

🎯 Dart 언어에서의 enhanced enum은 기존의 열거형(enum)에 더 많은 기능을 추가하여, 각 열거형 값에 메서드를 추가하거나, 계산된 프로퍼티를 포함시킬 수 있게 해줍니다. 이는 코드의 가독성과 유지 보수성을 크게 향상시킬 수 있는 강력한 기능입니다. Enhanced Enum의 주요 특징 - 메서드 추가: 각 열거형 값에 대해 메서드를 정의할 수 있습니다. - 프로퍼티 추가: 열거형 값에 계산된 프로퍼티를 추가할 수 있습니다. - 타입 안전성: 열거형을 사용함으로써 코드 내에서 타입 안전성을 보장받을 수 있습니다. String 값으로 Enum 값 얻기: Static Method 예시 enhanced enum을 사용하여 String 값을 입력받아 해당하는 열거형 값을 반환하는 static m..

무기/다트 2024.02.17

[플러터] 화면 전환 시 이미지가 튀어나오는 문제 수정

로컬 이미지 활용 플러터에서 네트워크 이미지가 아닌 로컬로 저장해둔 이미지를 사용하는 경우에도 위젯이 아래로 밀리는 경우가 있습니다. 이미지가 차지할 영역을 미리 알고 있지 못하는 경우입니다. 플러터에서 로컬 이미지 사용시의 일반적인 코드입니다. Image.asset( 'assets/images/sea_of_stars.png', fit: BoxFit.fitWidth, ), 화면에 보이는 모습은 다음과 같습니다. 이미지 위젯 아래 쪽의 위젯(예시에서는 텍스트 위젯)이 밀려나는 것을 볼 수 있습니다. 이러한 현상을 개선하려면 이미지의 높이 값을 지정해 주면 됩니다. Image.asset( 'assets/images/sea_of_stars.png', fit: BoxFit.fitWidth, height: Med..

[VS Code] 플러터 개발에 Android Studio 대신 VS Code를 사용하게 된 계기

플러터 개발을 시작하면서부터 안드로이드 스튜디오를 사용해 왔습니다. 초보자를 위한 플러터 강의 대부분이 안드로이드 스튜디오를 사용했기 때문에 자연스러운 선택이었다고 생각합니다. VS Code로도 플러터 개발을 할 수 있다는 것을 알았지만, 사용자에게 불친절하다는 선입견을 가지고 있었습니다. 안드로이드 스튜디오 사용에 만족했기 때문에 지금까지 잘 사용하고 있었습니다. 최근 깃헙 코파일럿 챗 기능이 VS Code에서 출시되었을 때 VS Code로 전환하는 것을 잠깐 생각했습니다. 안드로이드 스튜디오에서는 해당 기능을 사용할 수 없었기 때문입니다. 하지만 안드로이드 스튜디오에서도 언젠가 출시될 것이라고 믿었고, 지금은 지원되고 있습니다. 그런 식으로 안드로이드 스튜디오를 계속 사용해왔습니다. 그러다 어제 Fi..

유물 2024.01.27

<플러터> 패키지 사용시 앨범명 등 한글화하기

🧭 photo_manager 제가 한글화를 하고자 한 패키지는 photo_manager 입니다. 앨범명을 불러오는데 기본적으로 영어로 나옵니다. flutter localization 플러터 앱에 localization을 적용합니다. pubspec.yaml 수정 dependencies: flutter: sdk: flutter flutter_localizations: sdk: flutter intl: any main.dart 수정 import 'package:flutter_localizations/flutter_localizations.dart'; ... return const MaterialApp( ..., localizationsDelegates: [ GlobalMaterialLocalizations.d..

<플러터: Xcode> The operation couldn’t be completed. (AppThinning.StubError error 1.)

🐛 The operation couldn’t be completed. (AppThinning.StubError error 1.) xcode로 ipa 파일을 빌드하기 위해 아카이브를 진행 후 해당 에러가 발생했습니다. Show Logs 좌측 아래 'Show Logs' 버튼을 누르면 로그 파일이 생성되고, 해당 로그 파일들을 살펴보면... 잘 모르겠으니 stackoverflow로 넘어갑니다. sqlite3 로그 파일에 'cannot load such file -- sqlite3/sqlite3_native (LoadError)'와 같은 문장이 있었는데, stackoverflow에서도 비슷한 말들이 나오는 것을 알 수 있었습니다. sqlite 설치 및 시스템 기본 값 설정 sqlite3를 설치하고 시스템 기본..

<플러터> 드래그 또는 터치로 뒤집히는 카드 위젯 만들기

🧭 카드 뒤집기 Transform 위젯으로 아래 영상처럼 드래그 또는 터치로 뒤집을 수 있는 위젯을 쉽게 만들 수 있습니다. gist 링크 https://gist.github.com/reload1bronze/62a2f61d9b05e4f66f1ffbc29455b311 카드 드래그해서 넘기는 카드 위젯 카드 드래그해서 넘기는 카드 위젯. GitHub Gist: instantly share code, notes, and snippets. gist.github.com https://gist.github.com/reload1bronze/3b93c1a4e88c21cc0e00d54ed6ffe230 카드 좌우 영역 터치해서 넘기는 카드 위젯 카드 좌우 영역 터치해서 넘기는 카드 위젯. GitHub Gist: insta..

<플러터> 갤러리 사진의 gps 정보가 null 또는 0.0과 같이 제대로 넘어오지 않을 때

🧭 사진에 담긴 위치 정보 핸드폰으로 사진을 촬영하면 사진에 위경도 등의 위치 정보가 저장됩니다. exif exif 라이브러를 사용하여 사진의 위치 정보를 포함한 메타데이터를 읽어올 수 있습니다. 하지만 안드로이드에서 gps 좌표 정보가 null, 0.0 과 같은 결과를 얻게 되는 경우가 있습니다. ACCESS_MEDIA_LOCATION android > app > src > main > AndroidManifest.xml 파일에서 아래와 같은 uses-permission 을 추가 합니다. 다시 사진의 메타데이터를 읽어오면 정상적인 값을 확인할 수 있습니다. 📌 https://github.com/fluttercandies/flutter_photo_manager/issues/836 [BUG] In Andr..

<파이어베이스> 다이내믹 링크 동작 안함 - 안드로이드 13

🧭 다이내믹 링크 구글의 파이어베이스에서 제공하는 서비스로 앱의 설치를 유도하거나 앱 내 특정 컨텐츠로 이동시켜주는 링크입니다. 안드로이드 13에서의 문제점 잘되던 링크가 안드로이드 13에서 제대로 동작하지 않는 경우가 생겼습니다. 인텐트 필터 관련 설정을 추가해줘야 한다는 결론을 얻었습니다. AndroidManifest.xml 파일에 다음과 같은 코드를 추가해주었더니 해결되었습니다. ...(기타 다른 인텐트 필터) 위 코드에서 "example.com" 부분을 사용중인 링크의 호스트명으로 변경하시면 됩니다. 📌 https://github.com/firebase/firebase-android-sdk/issues/4198 [Dynamic links] Reading Dynamic link is not work..

액티브 스킬 2023.02.22

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

🧭 네이게이션 스타일 안드로이드는 일반적으로 '메뉴, 홈버튼, 뒤로가기' 묶음을 가지는 네비게이션 스타일을 가집니다. 하지만 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의 차이점은 아래 두번째 링크를 참고..