 
				import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/material.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
// Params
late AndroidNotificationChannel channel;
late FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin;
final navigatorKey = GlobalKey<NavigatorState>(); // NavigatorKeyをグローバルに定義
// 初期化
Future<void> initFCM() async{
  final fcmToken = await FirebaseMessaging.instance.getToken(); // FCMトークンの取得
  print('FCM Token: $fcmToken');
  // local notificaitons
  channel = AndroidNotificationChannel(
    'high_importance_channel', // id
    'High Importance Notifications', // title
    description: 'This channel is used for important notifications.', // description
    importance: Importance.max,
  );
  // init
  flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin();
  // request permission Android 13
  await flutterLocalNotificationsPlugin.resolvePlatformSpecificImplementation<
    AndroidFlutterLocalNotificationsPlugin>()?.requestNotificationsPermission();
  // create channel
  await flutterLocalNotificationsPlugin.resolvePlatformSpecificImplementation<
    AndroidFlutterLocalNotificationsPlugin>()?.createNotificationChannel(channel);
  // onTap
  const AndroidInitializationSettings initializationSettingsAndroid =
    AndroidInitializationSettings('launch_background');
  const InitializationSettings initializationSettings =
    InitializationSettings(android: initializationSettingsAndroid);
  await flutterLocalNotificationsPlugin.initialize(initializationSettings,
    onDidReceiveNotificationResponse: onDidReceiveNotificationResponse
  );
  // フォアグラウンド
  FirebaseMessaging.onMessage.listen((RemoteMessage message) {
    dispMessage('Fore', message);
  });
  // バックグラウンド
  FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) {
    dispMessage('Back', message);
  });
}
// 通知表示
void dispMessage(String mode, RemoteMessage message){
  print('$mode Message notification: ${message.notification?.title} / ${message.notification?.body}');
  print('$mode Message data: ${message.data}');
  //
  if(mode == 'Fore'){
    RemoteNotification? notification = message.notification;
    AndroidNotification? android = message.notification?.android;
    if (notification != null && android != null) {
      flutterLocalNotificationsPlugin.show(
        notification.hashCode,
        notification.title,
        notification.body,
        NotificationDetails(
          android: AndroidNotificationDetails(
            channel.id,
            channel.name,
            channelDescription: channel.description,
            icon: 'launch_background',
          ),
        ),
        payload: '/message',
      );
    }
  }else if(mode == 'Back'){
    final Map<String, RemoteMessage> args = {'message': message};
    navigatorKey.currentState?.pushNamed('/message', arguments: args);
  }
}
// タップ時
void onDidReceiveNotificationResponse(NotificationResponse details) {
  print('Message pressed');
  //
  final String? payload = details.payload;
  if(payload is String){
    final Map<String, NotificationResponse> args = {'details': details};
    navigatorKey.currentState?.pushNamed(payload, arguments: args);
  }
}
//
class MessageView extends StatelessWidget{
  const MessageView({super.key});
  @override
  Widget build(BuildContext context) {
    //
    String text = '';
    final Map<String, dynamic>? args = ModalRoute.of(context)?.settings.arguments as Map<String, dynamic>?;
    if(args is Map<String, dynamic>){
      for(var key in args.keys){
        if(key == 'details'){
          final NotificationResponse details = args[key];
          print('NotificaitonResponse.id: ${details.id}');
          text = 'Accept details';
        }else if(key == 'message'){
          final RemoteMessage message = args[key];
          print('RemoteMessage title = ${message.notification?.title}');
          text = 'Accept message';
        }
      }
    }
    //
    return Text('Message Page\n$text');
  }
}
import 'package:flutter/material.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:test202502/firebase_options.dart';
import './fcm.dart';void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform); // Firebaseの初期化
  await initFCM();
  // run
  runApp(const MyApp());
}      //home: const MyHomePage(title: 'Flutter Demo Home Page'),
      routes: {
        '/': (context) => MyHomePage(title: 'Flutter Demo Home Page'),
        '/message': (context) => MessageView(),
      },
      navigatorKey: navigatorKey,








 
												タグ: FCM