우리 회사는 인스타그램, 핀터레스트 못지 않게 많은 이미지를 사용한다.이전에 FastCachedNetworkImage패키지를 썼으나, main.dart에서 await init을 하는 시점에서 계획되지 않은 캐싱 전략으로 앱 용량은 1GB가 넘어갔고 결국 OS스플래시 단
LRU(Least Recently Used)는 캐시 교체 알고리즘의 하나다.말 그대로 가장 오랫동안 사용되지 않은 항목을 먼저 제거한다.즉, 최근에 쓰인 데이터는 앞으로도 쓸 가능성이 높고, 오래 안 쓰인 데이터는 다시 쓸 확률이 낮다고 가정하는 방식이다.이 원리를 기
iOS의 PlatformView(google_maps_flutter의 UiKitView)가 라우트 복귀(pop) 직후 재부착될 때 첫 탭을 내부 초기화에 소모해 GoogleMap.onTap이 호출되지 않는 순간이 있었다. 복귀 직후 1회용 투명 오버레이로 첫 탭을 가로
Flutter에서 카드 UI를 그리드로 배치할 때 GridView를 많이 사용한다. 보통은 SliverGridDelegateWithFixedCrossAxisCount를 쓰고 childAspectRatio로 가로세로 비율을 맞추곤 한다.하지만 이렇게 구현하면 단말기마다
Flutter로 개발을 하다 보면 가장 먼저 부딪히는 선택지가 있다. 바로 상태 관리(State Management) 를 어떻게 할 것인가이다. 상태 관리는 앱의 데이터 흐름과 UI 업데이트를 결정하는 중요한 요소인데, 어떤 라이브러리를 선택하느냐에 따라 프로젝트 구조
기존 구조: 바텀내비게이션 + GetX 처음 앱을 설계했을 때는 흔히 쓰는 방식대로 BottomNavigationBar + GetX 컨트롤러 조합을 사용했다. 각 탭을 누를 때마다 onTap에서 해당 화면의 컨트롤러를 초기화하고, API 요청을 보내 데이터를 가져오는
이건 Flutter Extension의 전체 동작을 제어한다.개인적으로 아래 옵션은 나에게 맞는 iOS 실기기 기준으로 안정성, 편의성, 속도 모두 고려한 최적 조합이다.
Flutter로 커뮤니티 앱을 개발하던 중, 대댓글 입력창에 상대방 닉네임 태그(@홍길동)를 표시하고 한글을 입력할 때, 닉네임 태그가 갑자기 사라지는 문제가 발생했다. 비슷한 문제를 겪는 개발자들에게 도움이 되길 바라며 문제 해결 과정을 기록한다.대댓글 입력창에서 T
Flutter로 커뮤니티 앱을 개발하던 중, iOS에서 Cupertino 스타일의 스와이프 제스처(뒤로가기) 가 앱의 특정 화면에서 의도치 않게 동작하는 문제가 발생했다.특히게시글 상세 페이지 등에서 사용자가 데이터를 입력 중(예: 좋아요, 댓글 작성) 혹은 좋아요 상
PageView.builder를 사용해 이미지/비디오 미디어 리스트를 스와이프이미지 뷰어: InteractiveViewer로 핀치 줌, 팬 기능 구현비디오 뷰어: VideoPlayerController + GestureDetector로 재생/탭 제어확대 여부를 감지하기
앱에 푸시 알림 붙였을 때, 안드로이드는 잘 동작하는데 iOS에서는 알림이 두 번씩 오는 문제가 생길 때가 있다. 특히 Firebase Cloud Messaging(FCM) 쓰고 있다면 이거 한 번쯤 겪었을 이슈다. 왜 이런 일이 생기는지, 그리고 어떻게 해결하는지 정
Flutter에서 이미지를 표시할 때 원본 이미지의 비율(aspect ratio)을 유지하면서 자동으로 너비를 조정해야 하는 경우가 있다. 특히 네트워크 이미지를 로드할 때는 이미지의 원본 크기를 미리 알 수 없기 때문에 더 어려움이 있을 수 있다. 이 글에서는 고정된
Dart의 기본적인 컬렉션(List, Set, Map)과 Class 개념을 하나씩 살펴보자.List는 Dart에서 배열과 유사한 개념으로, 여러 개의 값을 순차적으로 저장하는 컬렉션이다.인덱스(index)를 사용하여 요소에 접근중복된 값을 허용가변 길이(Growable
이번 프로젝트에서 styled widget 패키지를 사용하고 있어, 간략하게 패키지에 대해 정리한다.Styled Widget은 Flutter 애플리케이션에서 위젯의 스타일을 더 쉽고 체계적으로 관리할 수 있게 해주는 패키지다. 이 패키지를 사용하면 위젯의 스타일을 선언
Presigned URL 방식은 클라우드 스토리지 서비스에서 파일을 업로드하거나 다운로드할 때 자주 사용되는 접근 방법이다.이 방식은 서버가 특정 시간 동안 유효한 URL을 생성하여 클라이언트에게 제공한다. 이 URL을 사용하면 해당 시간 동안 인증 없이도 파일에 접근
Freezed 도입 이전에 직렬화와 불변 객체 생성에 대한 이해 개념이 필요하다.본 글은 코딩 공부를 시작하는 조카를 위해 최대한 쉽게 설명해보겠다.불변 객체는 한 번 만들어지면 그 값을 바꿀 수 없는 객체다. 예를 들어, 생성한 게임 캐릭터가 있다고 생각해보면 이 캐
사이드 프로젝트 시, 최신 버전의 플러터를 사용하고 싶어 본 글을 작성한다.기본적으로 Flutter SDK는 전체 시스템에 설치되며, 여러 프로젝트 중 특정 프로젝트만 플러터의 다른 버전으로 사용하는 것은 기본적으로 지원되지 않는다고 한다. 이는 Flutter SDK가
프로젝트 진행 시에 Sacffold의 body 속성과 Indexed Stack을 함께 사용하는데 있어 레이아웃 복잡도가 생겨 자식 위젯들이 겹치는 이슈가 발생했다.거기에 더해 나는 FAB까지 사용을 하는데 endflot위치가 바텀 내비게이션 바와 ui적으로 가까워 터치
이미지를 서버로 업로드할 때 이미지 크기가 너무 크면 전송 시간이 오래 걸리고, 네트워크 대역폭을 많이 차지할 수 있다. 이를 해결하기 위해 Flutter에서는 이미지 파일을 압축할 수 있다. 이 글에서는 image 패키지를 사용하여 이미지를 압축하는 방법을 알아보겠다
Vscode에서 CPU 사용량이 미친듯이 늘어나며 CPU 사용량이 130%가 넘어갈 지경이 되자 버벅이는 이슈가 발생하였다많은 익스텐션을 비활성화 또는 제거를 해봤지만 효과는 미미하였다.VScode 삭제하고 재설치 했지만 일시적인 효과만 있었다.폭풍 검색 끝에 나와 같