액티브 스킬/플러터 36

[플러터] Equatable 패키지 사용하기

플러터(Flutter)에서 개발을 진행하다 보면, 상태 관리와 관련하여 객체의 동등성(equality)을 확인해야 하는 상황이 자주 발생합니다. 이러한 문제를 해결하기 위해 Equatable 패키지를 사용하는 것이 일반적인 방법 중 하나입니다. 이 글에서는 Equatable 패키지가 무엇이고, 왜 플러터 개발에서 이를 사용하는지에 대해 설명하려고 합니다. Equatable 패키지란? Equatable은 Dart의 객체들이 서로 동등한지를 쉽게 확인할 수 있도록 도와주는 패키지입니다. Dart에서는 기본적으로 객체의 동등성을 == 연산자를 통해 확인할 수 있으나, 이는 기본적으로 객체의 식별자(identity)를 기반으로 합니다. 즉, 두 객체가 물리적으로 같은 인스턴스일 때만 true를 반환합니다. 이는..

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

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

<플러터> DateTime 다루기

🧭 DateTime 메서드 .toLocal() DateTime 타입의 데이터를 현지 시간으로 표현 .toUtc() DateTime 타입의 데이터를 utc 기준으로 표현 .difference(DateTime other) 파라미터로 넘어온 날짜로부터 차이나는 일수를 반환 DateUtils .dateOnly(DateTime date) 년월일까지만 반환 (시, 분, 초는 00으로 반영) .isSameDay(DateTime? dateA, DateTime? dateB) dateA와 dateB가 같은 날짜 인지 확인 (시, 분, 초 무시)

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

🧭 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> Xcode 14.3 빌드 에러

🐛 Xcode 14.3 에러 #1 Could not build the precompiled application for the device. Error (Xcode): File not found: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphoneos.a Error (Xcode): Linker command failed with exit code 1 (use -v to see invocation) 해결 #1 ios/Podfile에 아래와 같은 코드를 추가했습니다. (추가할 위치 파악을 위해, 기존 코드도 포함) post_install do |installer| i..

<플러터: 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..

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

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