전체 글 24

[Flutter] Crashlytics : Error recording on-demand exception

파이어베이스 Crashlytics iOS 적용간 발생한 에러를 포스팅하고자합니다~ https://pub.dev/packages/firebase_crashlytics firebase_crashlytics | Flutter packageFlutter plugin for Firebase Crashlytics. It reports uncaught errors to the Firebase console.pub.dev문서대로 완료 후 Crashlytics 에러 전송이 정상적으로 이루어지는 확인했습니다문제는 iOS에서 5분이 지나도 에러 리포트 생성이 되지 않는것이였습니다 (Android는 정상적으로 전송됨) 비정상종료 테스트를 실시했습니다Xcode에서 Product(제품) > Scheme(스키마) > Edit s..

Flutter 2025.09.15

[Flutter] iOS InAppWebView onCreateWindow에서 EXC_BAD_ACCESS 오류 해결기 (Xcode 16.4 이상)

Flutter 앱에서 flutter_inappwebview를 활용해 웹페이지를 렌더링하던 중, iOS에서 특정 상황에서 앱이 크래시 나는 현상을 경험했습니다. 이 글에서는 해당 오류가 발생한 원인과 해결 과정을 공유하고자 합니다. 사용 패키지: flutter_inappwebview오류 시점: iOS에서 onCreateWindow 콜백을 통해 새 창(WebView)을 열 때에러 메시지: Thread 1: EXC_BAD_ACCESS (code=1, address=0x0)발생 환경:inappwebview iOS Deployment Target: 12.0Xcode 16.4 이상 (Xcode 업데이트 이후 발생)flutter_inappwebview 최신 버전 사용 오류 해결을 위한 실패한 시도처음에는 다음과 같..

Flutter 2025.07.16

[Flutter] CacheNetWorkImage 캐시 갱신 문제 개선법

Flutter 앱에서 이미지 캐싱을 제대로 관리하지 않으면, 이미지가 변경되었음에도 불구하고 사용자에게는 이전 이미지가 계속 보이는 문제가 발생할 수 있습니다. 이 글에서는 CachedNetworkImage를 사용하는 경우, 이러한 캐시 갱신 문제를 해결하는 방법을 소개합니다. CachedNetworkImage는 이미지를 네트워크로부터 불러오고, 캐시에 저장해서 다음 로딩 시 성능을 개선합니다. 하지만 다음과 같은 상황이 발생했습니다.이미지의 URL은 동일하지만,서버의 이미지가 새로운 이미지로 변경됨.앱에서는 여전히 변경 전 이미지가 보임.즉, 캐시된 이미지가 오래된 상태로 남아 있는 것이죠. CachedNetworkImage(imageUrl: testImage,)이 경우, default 설정값동안 해당..

Flutter 2025.07.04

[Flutter] Clean Architecture: 개념부터 예제까지

Flutter 프로젝트가 점점 커질수록 코드 유지보수가 어려워지고, 테스트도 까다로워지며, 기능 추가 시 부작용(bug side effects)이 발생하기 쉬워집니다. 이런 문제를 구조적으로 해결할 수 있는 방법이 바로 Clean Architecture입니다. Clean Architecture는 의존성 규칙(Dependency Rule)에 따라 소프트웨어를 계층적으로 분리하여, 변경에 강하고 테스트하기 쉬운 구조를 만드는 설계 패턴입니다. 원래는 백엔드에서 시작됐지만, Flutter와 같은 프론트엔드에서도 적용 가능합니다.Clean Architecture는 크게 다음과 같은 4계층으로 나눌 수 있습니다.Presentation Layer : UIApplication Layer : UseCaseDomain..

Flutter 2025.06.13

[Flutter] 다운로드 수가 많은 인기 패키지 Top 10

Flutter 개발을 하다 보면 수많은 패키지 중 어떤 것을 써야 할지 고민하게 됩니다. 이번 글에서는 2025년 기준으로 pub.dev에서 다운로드 수가 많은 인기 패키지 Top 10을 소개합니다. 실무에서도 널리 쓰이는 라이브러리들인 만큼, 잘 알아두면 큰 도움이 될 것입니다. 1. built_value (https://pub.dev/packages/built_value)설명: Immutable value 객체를 쉽게 만들 수 있게 도와주는 패키지입니다.주요 기능: 코드 생성 기반으로 toString, ==, hashCode 자동 구현, 직렬화 등.추천 사용처: 복잡한 모델 클래스가 필요한 프로젝트, JSON 파싱 자동화.2. intl (https://pub.dev/packages/intl)설명:..

Flutter 2025.05.26

[Flutter] Android - deeplink가 앱을 재실행시키는 현상

딥링크로 Android앱을 실행시키는데, 앱이 이미 실행되어있으면 해당 Task에서 그대로 처리되기를 원했다.하지만 새로운 Task로 실행되면서, 재시작되는듯한 처리가 진행되었다. launchMode 값 변경으로 해결된 솔루션들이 있어서 적용했지만, 효과는 없었다.AndroidManifest를 분석하면서 해결에 성공해냈다. 해결방법AndroidManifest에서 해당 부분제거로 정상작동 확인완료. 수정은 잘되었지만 왜 고쳐진것인지 파악을 좀 더 해봤다.flutter_deeplinking_enabled는 Android 플랫폼이 딥링크 인텐트를 받았을때,Flutter 엔진이 해당 URI를 initalRoute로 간주해서 앱을 딥링크 경로로 초기화된 상태로 시작시킨다. flutter_deeplinking_en..

Flutter 2025.04.16

[Flutter] setState() 호출 시 mounted 체크 자동화

Flutter에서 비동기 작업이 끝난 후 setState()를 호출할 때, 종종 이런 에러를 마주친 적 있을 것이다. setState() called after dispose() 이 에러는 해당 위젯이 이미 dispose되었는데도 setState()를 호출했을 때 발생한다.특히 Future, Timer, 또는 Stream 이후 상태를 변경하려는 경우 이런 상황이 자주 발생한다. (대부분 Flutter개발자는 getX, provider, bloc 등 상태관리 패키지로 인해 setState()를 호출하지 않을 것이다.)  왜 mounted 체크가 필요할까?StatefulWidget의 생명주기에서 dispose()가 호출되면 그 이후엔 더 이상 UI를 업데이트할 수 없다.그런데 비동기 코드에서는 UI가 사라진..

Flutter 2025.04.10

[Flutter] Isolate 사용하기

Flutter는 기본적으로 단일 스레드에서 실행되며, 무거운 작업을 수행하면 UI가 멈추는 현상이 발생할 수 있다. 이를 해결하기 위해 Flutter는 Isolate라는 개념을 제공한다. Isolate는 Dart에서 제공하는 독립적인 실행 환경으로, 메모리를 공유하지 않는 별도의 스레드입니다. 따라서 멀티스레딩이 필요한 무거운 연산(예: 이미지 처리, JSON 파싱, 암호화 연산 등)에 적합하다. Isolate 사용법으로 2개를 준비봤다.compute()와  Isolate.spawn()이며 기능에 따라 사용을 권장한다. compute()를 사용한 간단한 Isolate 실행import 'package:flutter/foundation.dart';void main() async { var result = ..

Flutter 2025.03.27

[Flutter] 주기적인 이미지 캐시 초기화

E-Commerce앱이나 리스트로 대량, 대용량의 네트워크 이미지를 사용하는 경우 고려해볼 조치를 가져왔다. Image.network는 ImageCache를 사용하여 이미지를 캐싱한다.너무 많은 이미지가 캐시에 쌓이면 메모리 사용량이 증가하여 앱이 느려지거나, 심하면 OOM 크래시가 발생할 수 있다. imageCache.clear();imageCache.clearLiveImages();imageCache.maximumSize 이미지 캐시를 정리하거나 최대 캐시 메모리사이즈를 지정하여 메모리 부담을 줄일 수 있다. * cached_network_image는 디스크에 이미지를 저장하는데, 여기에도 너무 많은 이미지가 쌓이면 앱의 저장 공간을 많이 차지할 수 있다.  imageCache.clear(); 의 호..

Flutter 2025.03.17

[Flutter_Android] R8/ProGuard 적용 후 네아로 에러

네이버 로그인 SDK가 에러를 반환하는 것을 파악했다. 사용중인 네아로 패키지 : https://pub.dev/packages/flutter_naver_login flutter_naver_login | Flutter packageA Flutter plugin for using the native Naver Login SDKs on Android and iOS.pub.dev 1. 문제 현상Flutter Android 앱에 네이버 로그인 SDK를 적용한 후, R8/ProGuard를 활성화하면 네이버 로그인 API 응답에서 아래와 같은 오류가 발생 { status: NaverLoginStatus.error, account: { nickname: , id: , name: , email: , gender: , a..

Flutter 2025.02.26