Programming/Flutter(28)
-
최상위 Navigator와 MaterialApp, 그리고 Navigator.push()와 GetX.to()
FlutterLocalNotification 패키지를 사용해서 푸시 메시지를 터치하면, 특정 페이지로 이동하게끔 구현을 해뒀다. 문제는 사용자가 이미 특정 페이지에 진입해있을 때, 푸시 메시지를 터치하는 경우. 이 경우에는 다른 동작을 처리하게끔 만들어주고 싶었다. navigation_history_observer | Flutter Package 그래서 사용한 것이 바로 NavigationHistoryObserver. 이 친구를 사용하면 MaterialApp이 push(), pop()등을 할 때마다 내부 리스트에 route를 저장해서, 현재 어느 페이지에 위치해있는지 파악할 수 있게 된다. 매번 push()를 호출하기 위해 MaterialPageRoute를 설정하는 것은 귀찮은 일이었기 때문에, 다음과 ..
2022.07.05 -
[Flutter] isolate와 SharedPreferences, 그리고 파일에 대한 접근 2
이전에 isolate에서 SharedPreferences 패키지에 접근 시, 문제가 발생해서 파일에 데이터를 저장한 후 SharedPreferences처럼 사용하는 방법을 기재한 적이 있습니다. 당시 FirebaseMessaging.onBackgroundMessage() 함수에 넘겨준 콜백 함수가 Android에서는 isolate로 동작하고, SharedPreferences 내부 구현은 네이티브로 구현되어있는데, isolate에서 SharedPreferences에 접근이 안되는 원인을 찾지 못해서였죠. 당시에는 path_provider에서 제공하는 getApplicationDocumentsDirectory()함수를 사용해서 처리했고, 당시에는 isolate에서 파일을 읽고 쓰는 걸 확인했었습니다. [Fl..
2022.06.10 -
[Flutter] 백그라운드에서 띄운 푸시 알람 메시지를 터치해서 앱을 실행했을 때, getInitialMessage()가 동작하지 않는다.
꽤 예전에 FirebaseMessaging을 사용해서 전달받은 클라우드 메시지를, FlutterLocalNotifications를 사용해서 푸시 메시지로 띄우는 작업을 했었습니다. 이번에 맞닥뜨린 문제는 FlutterLocalNotifications를 사용해서 화면에 띄운 푸시메시지를 터치해서 앱이 실행됐을 때, FirebaseMassaging에서 제공하는 getInitialMessage()의 실행 결과값이 null로 반환되는 상황입니다. 물론 onMessageOpenedApp() 역시 기대한대로 동작하지 않습니다. private Task getInitialMessage(Map arguments) { return Tasks.call( cachedThreadPool, () -> { if (initialMe..
2022.02.04 -
[Flutter] isolate와 SharedPreferences, 그리고 파일에 대한 접근
예쓰! 검은곰입니다. 오늘은 Flutter의 isolate와 shared_preferences에 대한 내용을 정리하려고 합니다. 정확히는 이번에 굉장히 골머리를 겪게했던 이슈에 대한 정리로, 여러분들은 Isolate 내에서는 native 코드에 접근할 수 없다. shared_preferences 패키지는 native 코드의 SharedPreferences를 참조하므로, 사용할 수 없다.라는 내용만 기억하시면 됩니다. 개발자로써 코드를 작성하다보면 오만가지 코드와 상황을 만나게 되기 마련이지만, 저랑 비슷한 상황을 만나기는 쉽지 않을 거거든요. 아무튼 isolate에서 shared_preferences에 저장해놓은 값을 읽어서 분기처리해야 하는 상황에 처했습니다. 보통 직접 isolate를 생성하는 경우에..
2021.11.19 -
[Flutter] Flutter에서 SharedPreferences에 저장한 값을, Android 네이티브 영역에서 참조해보자.
여기서는 Flutter 패키지 중 SharedPreferences를 지원하는 shared_preferences 패키지를 사용합니다. 다른 패키지를 사용하는 경우, 이 글의 내용은 별 다른 쓸모가 없을 가능성이 높습니다. Flutter에서의 Shared Preferences 요구사항을 구현하다보면 값을 저장해야되는 경우가 생깁니다. 복잡한 데이터라면 데이터베이스를 사용하는 방법이 좋겠지만, 간단한 플래그나 설정값 등을 저장하기 위해서 데이터베이스를 사용하긴 아무래도 부담되기 마련입니다. 이럴 때 우리는 Shared Preferences를 사용하곤 합니다. Flutter에서도 이런 요구사항은 당연히 필요하기 마련인지, shared_preferences 패키지가 제공됩니다. 이번 글에서는 shared_pref..
2021.10.28 -
[Flutter] firebase_messaging과 flutter_local_notifications을 사용한 푸시 알림 기능 구현
이번에는 파이어베이스를 사용해서 모바일 디바이스에 푸시 알림을 보내고, 알림 소리를 커스터마이징하는 방법에 대해 정리해봅니다. 대충 찾아봐도 예제가 한가득 나오는 것 같지만 굳이 정리하는 이유가 별도로 있는데요. 검색과 삽질을 통해 확인해본 결과 대부분 검색 결과가 예제에만 그쳤기 때문에, 여러 검색 결과를 머릿속에 그러모아 짜집기해서 조립한 뒤에도 삽질에 삽질을 거듭한 뒤에야 간신히 원하는 기능을 구현할 수 있었기 때문입니다. 대부분의 경우 예제만 가지고 필요한 기능을 구현할 수 있겠지만, 검색을 거듭하다 결국 변방의 이 블로그에 이르렀다는 건 삽질에 삽질을 거듭하고 있다는 증거겠죠. 혹시나 삽질에 도움이 되는 내용이 있는지 빠르게 확인할 수 있게, 어떤 순서로 진행할 건지 나열해보겠습니다. 아, 공식..
2021.10.18