升级flutter_local_notifications至12.0.3后出现onSelectNotification未定义错误的解决咨询(Flutter新手求助)
这个问题我之前升级flutter_local_notifications的时候也碰到过!原因是12.0.0及以上版本官方移除了initialize方法里的onSelectNotification参数,换成了更适配新平台特性的通知响应回调机制,我来帮你一步步修改代码解决:
1. 替换初始化时的点击回调逻辑
把原来通过onSelectNotification写的点击处理逻辑,迁移到InitializationSettings的onDidReceiveNotificationResponse参数中,修改你的_initNotifications方法:
Future<void> _initNotifications() async { const androidInitializationSettings = AndroidInitializationSettings('@drawable/app_notification_icon'); const iosInitializationSettings = DarwinInitializationSettings( requestAlertPermission: false, requestSoundPermission: false, requestBadgePermission: false, ); // 改成非const的InitializationSettings,方便传入实例内的回调逻辑 final initializationSettings = InitializationSettings( android: androidInitializationSettings, iOS: iosInitializationSettings, // 这里替代原来的onSelectNotification,处理通知点击事件 onDidReceiveNotificationResponse: (response) { final payload = response.payload; if (payload != null) { final QuizPaperModel quizPaperModel = QuizPaperModel.fromJson(json.decode(payload)); Get.toNamed(LeaderBoardScreen.routeName, arguments: quizPaperModel); } }, ); // 初始化时不再需要第二个参数 await _notifications.initialize(initializationSettings); // 可选:如果你的应用支持Android 13+(目标SDK>=33),需要主动请求通知权限 if (Platform.isAndroid) { await _notifications.resolvePlatformSpecificImplementation<AndroidFlutterLocalNotificationsPlugin>() ?.requestNotificationsPermission(); } }
2. (可选)处理应用未启动时的通知点击
如果需要处理用户点击通知直接启动应用的场景,可以在初始化后添加这段逻辑:
// 在_notifications.initialize(initializationSettings)之后添加 final notificationAppLaunchDetails = await _notifications.getNotificationAppLaunchDetails(); if (notificationAppLaunchDetails?.didNotificationLaunchApp ?? false) { final payload = notificationAppLaunchDetails?.notificationResponse?.payload; if (payload != null) { final QuizPaperModel quizPaperModel = QuizPaperModel.fromJson(json.decode(payload)); Get.toNamed(LeaderBoardScreen.routeName, arguments: quizPaperModel); } }
额外提醒
- 要是你需要处理应用被杀死时的后台通知点击,还得配置
onDidReceiveBackgroundNotificationResponse回调,以及对应平台的后台配置(比如Android的广播接收器、iOS的通知扩展)。 - Android 13+需要在
AndroidManifest.xml里添加通知权限:<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
内容的提问来源于stack exchange,提问作者Dr iTech
相关产品推荐
相关产品推荐

