반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 프로그래머스
- IOS
- dfs
- 자바
- flutter
- element tree
- linebreak
- zwj
- 초기화
- 싱글톤
- Render object tree
- 에러
- 플러터 동작
- 앱아이콘 변경
- Widget Tree
- dart
- 알고리즘
- Kotlin
- 자료구조
- 재귀
- Java
- 거리알고리즘
- 완전탐색
- 프리즈드
- 코틀린
- Singleton
- 플러터
- Android
- 비동기 처리
- Lazy
Archives
- Today
- Total
모바일 개발하는 자바리안의 메모장
Flutter - 앱 실행 시 발생하는 PlatformException 해결(flutter_secure_storage plugin) 본문
Flutter
Flutter - 앱 실행 시 발생하는 PlatformException 해결(flutter_secure_storage plugin)
자바리안 2022. 7. 1. 00:05반응형
Flutter 앱을 실행해보니 아래와 같은 PlatformException이 발생했다.
PlatformException (PlatformException(Exception encountered, deleteAll, java.lang.NullPointerException: Attempt to invoke interface method 'android.content.SharedPreferences$Editor android.content.SharedPreferences.edit()' on a null object reference
at com.it_nomads.fluttersecurestorage.FlutterSecureStoragePlugin.deleteAll(FlutterSecureStoragePlugin.java:193)
at com.it_nomads.fluttersecurestorage.FlutterSecureStoragePlugin.access$800(FlutterSecureStoragePlugin.java:37)
at com.it_nomads.fluttersecurestorage.FlutterSecureStoragePlugin$MethodRunner.run(FlutterSecureStoragePlugin.java:330)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.os.HandlerThread.run(HandlerThread.java:65)
, null))
항상 발생하는 것도 아니고, 앱을 삭제한 뒤 실행했을 때만 발생해서 그냥 지나쳤던 것 같다..
FlutterSecureStoragePlugin의 함수가 원인인 것 같은데,
해당 Plugin은 이름 그대로 secured storage를 제공해주는 플러그인인데 iOS의 경우 keychain, Android는 SharedPreference에 데이터를 저장한다.
위 로그를 보면 안드로이드 플랫폼에서는 NullPointerException이 발생하는데,,
확인해본 결과,, 원인은 Android 에서 Shared Preference가 아직 초기화가 되지 않은 상태에서 Flutter가 해당 영역에 접근을 하려고 해 발생하는 문제로 확인되었다.. (고수 시니어 개발자님의 조언으로 문제 확인)
최신 버전 패치 노트를 보면 해당 이슈가 수정되었다고 하는데,,
운이 나쁜건지 나는 버전을 올려도 동일한 문제가 계속 발생한다...(최근 등록된 이슈들을 통해 나만 그런건 아닌 것으로 확인)
결국 아래와 같이 do while 내에서 exception 이 발생하지 않을때까지 계속 시도하는 방식으로 해결했다 :
var count = 0;
final maxAttempts = 5;
do {
try {
await _storage.deleteAll();
break;
} on PlatformException catch (_) {
// Using delayed as a time buffer
await Future.delayed(Duration(milliseconds: 200));
count++;
}
} while (count != maxAttempts);
여러번 돌리며 확인해 본 결과 Shared Preference가 초기화되기까지 약 0.8초정도의 시간이 추가 소요되었다.
썩 만족스러운 솔루션은 아니기에,,, 부디 다음 패치에서는 이 문제가 완벼쿠하게 해결되었기를 기대해본다..
반응형
'Flutter' 카테고리의 다른 글
Flutter - Factory 생성자 (0) | 2022.11.03 |
---|---|
Flutter - Xcode 13 업데이트 실패(무한 로딩) (0) | 2022.08.19 |
Flutter - java.lang.UnsatisfiedLinkError, couldn't find "libflutter.so" 해결 (0) | 2022.06.23 |
Flutter(dart) - 비동기 프로그래밍 (Future) (0) | 2022.04.01 |
Flutter - Container에 Decoration borderRadius 가 적용되지 않을 때 (ClipRRect) (0) | 2022.01.25 |
Comments