분류 전체보기 (41) 썸네일형 리스트형 YOLO 모델 감지 오류 - labelIndex 매핑 누락 트러블슈팅 1. 문제 상황Flutter 앱에서 YOLOv8 모델(.tflite)을 사용해 강아지 사진을 감지하려 했지만,감지 결과가 항상 비어 있었고 'dog' 클래스를 전혀 인식하지 못하는 문제가 발생했다.사진을 정상적으로 불러오고 추론까지 실행되는데도 결과가 없는 이유를 찾는 데 꽤 시간이 걸렸다. 2. 원인분석YOLO 모델의 결과는 labelIndex라는 숫자 인덱스만 반환한다.즉, 16 같은 숫자만 제공하고 이것이 'dog'인지 'person'인지 알 수 없기 때문에,초기에는 라벨명을 비교하는 코드가 전혀 동작하지 않았다.예를 들어 이런 코드가 문제였다:if (result.labelIndex.toLowerCase() == 'dog') // int에는 toLowerCase 없음 2. 해결방법모델과 함께 제공되.. Flutter에서 429 Too Many Requests 오류 해결기 – Debounce, RateLimiter, 캐시 전략까지 Flutter 앱에서 키워드 검색 및 장소 추천 기능을 구현하던 중, 429 Too Many Requests 오류가 빈번하게 발생하는 이슈가 있었습니다. 단순 API 호출 문제를 넘어서, 사용자 경험에도 큰 영향을 주는 이 문제를 Debounce, RateLimiter, LRU 캐시 전략을 통해 해결한 과정을 정리해봅니다. 1. 문제 상황키워드를 입력할 때마다 실시간으로 API가 호출되어 트래픽 폭주Kakao 또는 장소 검색 API에서 429 Too Many Requests 빈발429 응답이 처리되지 않아 앱이 빈 화면을 보여주거나 무한 재시도 루프에 빠짐2. 원인분석 1. Debounce 미적용 → 타이핑할 때마다 요청 발생 (순간 QPS 과다)2. 캐시 미구현 → 같은 키워드와 좌표로 반복 호출3. .. 뒤로가기 후 재진입 시 TabController 오류 문제상황MapPage에서 뒤로가기 후 다시 진입하면 앱이 종료되거나 아래와 같은 오류가 발생함:FlutterError: A TabController was used after being disposed.LateInitializationError: Field '_tabController@xxxxx' has not been initialized. 원인 분석MapViewModel 내부에서 TabController를 생성해두고, 이후 MapPage를 pop()하고 다시 진입했을 때 기존 TabController가 dispose된 상태에서 다시 접근하면서 오류 발생.특히, PlaceCarousel, DayTabBar 등에서 viewModel.tabController!처럼 널 체크 없이 강제 사용한 것도 문제의 원.. 영화정보앱 - 트러블슈팅 type 'Null' is not a subtype of type 'String' 오류 해결하기 type 'Null' is not a subtype of type 'String' 오류 해결하기Flutter로 TMDB API 연동을 하던 중, 아래와 같은 오류를 마주했다.type 'Null' is not a subtype of type 'String'발생 상황TMDB API의 JSON 응답에서 일부 값이 null인 경우, String 타입으로 강제 파싱하려다 생긴 문제다.예를 들어 아래 코드처럼 DTO를 정의했을 때, class ProductionCompany { final int id; final String logoPath; ProductionCompany({ required this.id, required this.logoPath, }); factory ProductionCompan.. 영화정보앱 - 트러블 슈팅 Hero 애니메이션 작동 안할 때 해결 방법 정리 문제 상황리스트에서 포스터를 누르면 상세 페이지로 전환되는데,Hero 애니메이션이 아예 작동하지 않음. 부자연스럽게 그냥 화면이 전환됨.원인 분석Hero 태그가 서로 다름또는 두 Hero 위젯이 다른 화면에서 동일한 context에서 처리되지 않음특히 ListView.builder에서 tag를 아래처럼 만들었는데,상세 페이지로 넘길 때는 tag가 다르게 전달되었음.final tag = 'movie_${movie.id}_${label}_$index'; // 리스트에서 사용한 tag 하지만 상세 페이지에서는 이렇게 넘김:heroTag: 'movie_${movie.id}', // tag가 다름 → Hero 작동 안함 해결 방법두 화면에서 사용하는 Hero 위젯의 tag가 완벽히 동일해야 함.즉, Home.. 영화정보앱 - 트러블슈팅 ProviderNotFoundException 해결 방법 정리 문제 상황ProviderNotFoundException (Error: Could not find the correct Provider above this DetailPage Widget)이런 에러가 발생하면서 앱이 크래시남. 특히 DetailPage를 띄울 때 발생했음.원인ChangeNotifierProvider로 MovieDetailViewModel을 등록했지만,context.read() 또는 context.watch()를 너무 일찍 사용해서 문제가 발생함.Flutter의 위젯 빌드 트리 구조상, ChangeNotifierProvider가 아직 context에 반영되기 전에 watch()를 호출하면 위와 같은 에러가 발생함.해결 방법fetch() 호출을 addPostFrameCallback 내부에서 하.. flutter 심화 GoRouter Flutter GoRouter 기존에는 Navigator로 라우팅을 처리했었는데, 페이지가 많아지니까 코드가 지저분해지고 관리하기가 힘들었다. 그런데 GoRouter를 쓰니까 구조도 깔끔하고 생각보다 너무 편하다고 느껴졌다. GoRouterFlutter용 라우팅 도우미.화면 전환할 때 URL 기반으로도 되고, 구조화도 잘되고, context.go() 이런 식으로 라우팅도 간편하게 처리할 수 있음.내가 느낀 장점은 딱 이거다:코드 깔끔해짐웹/앱 둘 다 호환 잘됨구조가 눈에 잘 보임나중에 수정할 때 훨씬 쉽다 설치dependencies: go_router: ^6.0.0 또는 터미널에서 flutter pub add go_router예제final GoRouter _router = GoRouter.. 운동하실? 앱 - Map 페이지 흐름 정리 1. 지도 페이지가 열리면동작 흐름Flutter NaverMap 위젯이 준비되면서 onMapReady가 호출된다.지도 컨트롤러(mapController)를 초기화한다.Firestore에서 게시글(boards) 데이터를 불러온다.boards의 위치 데이터를 좌표로 변환해서 지도에 마커를 표시한다.* 관련코드NaverMap( onMapReady: (controller) async { // 지도 준비 완료되면 viewModel.mapController = controller; // Firestore에서 boards 불러오기 await viewModel.loadBoards(); // boards 데이터 기반으로 지도에 마커 추가 await viewModel.addMarkers((Board board) { // .. 이전 1 2 3 4 ··· 6 다음 목록 더보기