모바일 개발하는 자바리안의 메모장

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초정도의 시간이 추가 소요되었다.

 

썩 만족스러운 솔루션은 아니기에,,, 부디 다음 패치에서는 이 문제가 완벼쿠하게 해결되었기를 기대해본다..

반응형
Comments