반응형
runApp 수준 전에 플러터 로컬 노티를 초기화 해서 onDidReceiveNotificationResponse 콜백에서
context 없이 navigator 이용을 어찌하나 고민이 많았을 여러분을 위해 !!
최상단이 아닌 _MyApp 에서 MaterialApp 위젯을 호출했다면 그 밑 위젯 (Ex 스플래쉬)에서 didChangeDependencies 혹은 initState 을 오버라이드하여 그 시점에 플러터로컬노티를 초기화 해주면 된다.
그리고 context를 인자로 받아서 사용하면 끝 !
void initializeNotification(BuildContext context) async {
// FlutterLocalNotificationsPlugin 인스턴스 생성
final flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin();
// Android용 알림 채널 생성
await flutterLocalNotificationsPlugin
.resolvePlatformSpecificImplementation<
AndroidFlutterLocalNotificationsPlugin>()
?.createNotificationChannel(const AndroidNotificationChannel(
'high_importance_channel', // 알림 채널 식별자
'high_importance_notification', // 알림 채널 이름
importance: Importance.max, // 알림 중요도 최대 설정
));
// iOS 초기화 설정
DarwinInitializationSettings iosInitializationSettings =
const DarwinInitializationSettings(
requestAlertPermission: true, // 알림 권한 요청: Alert
requestBadgePermission: true, // 알림 권한 요청: Badge
requestSoundPermission: true, // 알림 권한 요청: Sound
);
// 플랫폼별 앱 아이콘으로 알림 표시 설정
InitializationSettings initializationSettings = InitializationSettings(
android: const AndroidInitializationSettings("@mipmap/launcher_icon"),
iOS: iosInitializationSettings,
);
// 알림 플러그인 초기화
await flutterLocalNotificationsPlugin.initialize(
initializationSettings,
onDidReceiveNotificationResponse: (detail) async {
print("포어그라운드에서 알림을 클릭했을 경우 이 함수 실행");
if (detail.payload == null) return;
_foregroundMessage(detail.payload!);
},
);
}
void _foregroundMessage(String communityId) async {
setAlarm(communityId).whenComplete(() {
ref.read(pageIndexProvider.notifier).state = 3;
// Navigator.of(context)
});
}
context는 인자로 받아놓고 안 썻지만 쓸 수 있다는걸 위해 포함 시켰음. 여기선 그냥 상태관리로 바텀 네비게이션 바꾸어서 페이지 이동했음! 구현은 자신의 프로젝트에 맞게 하시면 되고 "context"가 필요한 경우 이렇게 받아올 수 있다는 설명인데 제 어휘력이 부족한 부분은 댓글 달아주시면 친절하게 설명해드리겠습니다 ㅎㅎ!
'Flutter' 카테고리의 다른 글
[Flutter] 플러터 - Using the Impeller rendering backend (0) | 2024.01.21 |
---|---|
[Flutter] 플러터 - fcm flutter_local_notifications 쓰는 이유 (1) | 2024.01.19 |
[Flutter] 플러터 - Ios fcm 알림 foreground 중복으로 두번 온다면? (0) | 2024.01.16 |
[Flutter] 플러터 - MAC fvm으로 쉽게 버전관리 (0) | 2024.01.13 |
[Flutter] 플러터 - 버전 변경하기 (0) | 2024.01.04 |