You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 13:02:30