Flutter 6

[Android] Firebase FCM(Firebase Cloud Messaging) 설정 및 푸시 알림 테스트

Flutter로 앱을 개발하면서 푸시 알림 기능을 구현할 일이 생겼다.사실 처음이 아니긴 한데, 지난번에 대충 해놓은 게 마음에 들지 않아서 이번에는 처음부터 다시 정리해봤다.생각보다 설정할 게 많고, 삽질도 좀 있었지만 흐름을 잡고 나면 꽤 단단한 구조로 구현할 수 있다.나처럼 처음 해보는 사람에게 도움이 되길 바라며 기록을 남긴다.1. Firebase 프로젝트 설정 및 앱 등록Firebase Console에서 새 프로젝트 생성Android 앱 등록google-services.json 다운로드 후 android/app 디렉토리에 추가2. Android 설정android/build.gradleplugins { id 'com.google.gms.google-services' version '4.4.2..

개발/Android 2025.06.10

[Flutter] 두 개의 비디오를 동기화 재생하는 방법 (버퍼링/동기화 문제 해결)

Flutter 프로젝트를 진행하면서 두 개의 네트워크 비디오를 동시에 재생하려고 하였다. better_player_plus, chewie 등 다양한 패키지를 시도해 보았지만, 상황은 크게 나아지지 않았다.특히 iOS에서는 정상적으로 잘 재생되던 영상들이 Android에서는 버퍼링이 심하게 발생하는 문제가 있었다.네트워크 상태와 상관없이 AOS 기기에서는 끊김 현상이 빈번하게 발생해 안정적인 재생이 어려웠다.그러나 예상보다 심각한 버퍼링과 동기화 문제를 경험하게 되었다.해결 방법을 찾던 중, Stack Overflow에서 비슷한 문제를 겪은 개발자들이 CachedVideoPlayerPlus를 추천하는 것을 발견하였다.바로 pub.dev에서 관련 문서를 찾아 읽어보았고, 이를 통해 문제 해결의 실마리를 얻을..

개발/Android 2025.04.28

[Flutter] 푸시알림 foreground와 background에서 ref.invalidate() 사용 시 새로고침 오류 해결하기

Flutter에서 ref.invalidate()를 바로 호출하면 생기는 문제와 Future.microtask로 해결한 방법Flutter로 앱을 개발하면서 Riverpod의 ref.invalidate()를 사용할 일이 생겼다. 푸시 알림을 통해 결과 화면으로 진입했을 때, 바로 서버에서 받아온 데이터를 화면에 띄우고 싶었다. 그래서 페이지에 진입하자마자 리스트를 갱신해주려고 ref.invalidate()를 호출했다.문제 상황처음에는 다음과 같은 구조로 간단하게 코드를 작성했다.@override Widget build(BuildContext context) { final listAsync = ref.watch( listAsync(dataIdentifier: identifier), ); /..

개발/Android 2025.04.21

[Flutter] Riverpod 상태관리 - watch vs read 차이

Riverpod에서 watch vs read 차이점 정리 및 UI 리빌드 분석Flutter에서 상태 관리를 하다 보면 Riverpod을 선택하는 경우가 많다. 기능적으로 강력하지만, 처음 접했을 땐 watch와 read의 차이로 인해 의도치 않게 UI가 안 바뀌거나 과도하게 빌드되는 상황이 발생하기도 한다.이 글에서는 실제 사용 중 겪었던 경험을 바탕으로 watch와 read의 차이를 구체적인 예제와 함께 정리해봤다.ref.watch와 ref.read의 핵심 차이사용 방식 UI 리빌드 여부 설명ref.watch(provider)✅ 리빌드됨상태 변경 시 UI 자동 리빌드ref.read(provider)❌ 리빌드 안됨현재 값만 읽고 이후 변경 무시ref.watch(provider.notifier)❌ 리빌드 ..

개발/Android 2025.04.02

[Flutter] 간단한 ToDo앱에서 MethodChannel 응용

Flutter 앱과 안드로이드 네이티브 코드(Kotlin) 간의 통신을 위한 플러그인(Platform Channel) 구현 코드📌 주요 역할Flutter에서 보낸 메소드 호출(Method Call) 을 안드로이드 네이티브에서 처리할 일 목록(To-Do List)을 저장하고 불러오는 기능 제공SharedPreferences를 이용해 데이터를 저장 및 관리📂 코드 상세 설명1. 기본 클래스 및 변수 선언class MainActivity : FlutterActivity() { private val CHANNEL_NAME = "com.example.to_do_list/task_channel" private val TAG = "MainActivity"MainActivity는 FlutterActivi..

개발/Android 2025.03.10

[Flutter] MethodChannel이란 ?

Flutter에서 MethodChannel은 Flutter와 네이티브 플랫폼(Android, iOS) 간에 데이터와 메서드를 주고받는 데 사용됩니다. 이를 통해 Flutter 앱 내에서 네이티브 코드(예: Java, Kotlin, Objective-C, Swift)와 상호작용할 수 있습니다. MethodChannel을 사용하면 Flutter와 네이티브 간에 기능을 확장하거나 네이티브 API를 활용할 수 있습니다.1. MethodChannel이란?MethodChannel은 Flutter와 네이티브 플랫폼 간에 메서드 호출과 결과를 전달하는 채널입니다.Flutter에서는 MethodChannel을 사용하여 네이티브 코드에 메서드를 호출하거나 네이티브 코드에서 결과를 Flutter로 반환할 수 있습니다.2. ..

개발/Android 2025.03.10