전체 글 15

[Flutter] Provider + API + MVVM 패턴 적용

Flutter는 선언형 UI를 사용하고있기에 상태관리가 매우 중요하다.기존 xml로 화면을 그린 안드로이드는 textView에 setText();하면 텍스트가 반영되는 구조였지만선언형 UI에서는 dataBinding이 되어있지만 데이터 변경을 위젯에 알려야한다고 봐야한다. setState()는 위젯전체를 그리는 방식으로 많은 리소스를 사용하여 비효율적이다.또한 로직에 따라서 setState()가 무수히 많이 사용되는 경우가 있을 수 있다. setState를 굳이 사용하지 않고 상태관리를할 수 있는 대표적인 패키지는 GetX, Provider, BLoC, RiverPod가 있다.오늘은 Provider와 MVVM패턴의 결합을 알아 볼 것이다.(Model, View, ViewModel구조를 사용하며 Repos..

Flutter 2024.07.02

[Flutter] Firebase - Crashlytics PlatformDispatcher (최종)

https://devyong.tistory.com/1 에서 crashlytics에 원하지않는 로그유형은 기록되지 않는 방법을 고민해봤고 테스트했다. 내가 원하는 이벤트 로그전송의 조건이다. HttpException, SocketException, HandshakeException은 파이어베이스로 로그 전송이 되지않을것. 실패코드 1.FlutterError.onError = FirebaseCrashlytics.instance.recordFlutterFatalError;FlutterError.onError = (FlutterErrorDetails details) { FirebaseCrashlytics.instance.recordFlutterError(details);}; 실패코드 2.Isolate.cur..

Flutter 2024.06.27

[Flutter] InAppWebView - useShouldInterceptRequest가 발생시킨 ANR

앱 배포 후 주기적인 모니터링간 최근 ANR이 증가한 것을 발견했다.잠잠하던 그래프가 갑자기 급상승했다. (다행히 IOS앱은 해당 ANR은 관측되지 않았다.)웹서버, API, 웹뷰 등 환경에서 배포당시와 변환 환경이 있는지를 확인했다.해당 일자에 웹뷰페이지 내에 광고스크립트가 심어진 이슈가 있었으며, 그 이후로 해당 페이지에서 ANR이 실제로 1초간 발생했다.다른 외부브라우저(크롬, 구글, 웨일)에서는 발생하지않고, 나의 앱에서만 ANR이 있었는데.. 웹뷰 설정과 광고스크립트간의 충돌이 있었던 것 이다.InAppWebViewSettings( useShouldInterceptRequest: true useShouldInterceptRequest 옵션은 Android에서 작동하며 default는 false..

Flutter 2024.06.21

[Flutter] InAppWebView - 뒤로가기

웹뷰에는 여러가지 세팅과 커스텀이 필요하지만 오늘은 2가지 문제점에 대한 해답을 찾고자한다.1. Android, IOS의 웹뷰 뒤로가기 (history.back) 처리2. resize, bottomPadding 처리 ----- 1. Android, IOS의 웹뷰 뒤로가기 (history.back) 처리  (문제는 IOS의 뒤로가기처리...) 뒤로가기 버튼클릭시에는 history.back이 이루어지고 back이 불가능한 상태에서는 웹뷰화면이 닫히도록 구현이 필요했다.뒤로가기 버튼클릭을 감지할 수 있어야했으며, 클릭시 제어도 가능해야했다.정말 쉽게도 조금만 검색하더라도 WillPopScope를 이용하여 뒤로가기처리가 가능했다.Future _goBack() async { if (await _controlle..

Flutter 2024.06.18

[Flutter] Firebase - Crashlytics PlatformDispatcher

Crashlytics에는 모든 Exception이 전송되고있다. 네이티브앱의 경우, Exception은 비정상종료로 이어지고 Crashlytics에는 비정상종료 이벤트로 기록이 된다.하지만 Flutter Zone으로 Exception이 비정상종료로 이어지지 않도록 조치를 해놨다. 그러다보니, Exception만 매우 많은 수치가 기록이 되었다..심지어 NetWork.Image에서 발생한 에러들도 기록이 되고있었다. 예를들면, 대량의 이미지를 ListView로 노출하다가 네트워크연결 등 이슈로 이미지로딩 에러가 발생한다면로딩중이던 이미지의 수만큼 로그가 전송된다는것이다. 안드로이드 네이티브 프레임워크에서는 ImageView 로딩이 실패한 경우가 Exception 로그전송이나 비정상종료로 이어지지 않아서 당..

Flutter 2024.06.14