Flutter项目iOS编译报错:参数'onSelectNotification'未定义求解决
Flutter本地通知初始化参数报错问题
我在Flutter项目中有一个通知服务类,以下是部分代码片段:
_initialize() async { print('notification _initialize'); const android = AndroidInitializationSettings('@mipmap/ic_launcher'); await plugin.initialize( const InitializationSettings( android: android, ), onSelectNotification: _onSelectNotification, ); } _onSelectNotification(String? payload) { print('_onSelectNotification'); if (payload != null && payload.isNotEmpty) { var array = payload.split('/'); if (array.length == 2) { var acao = int.tryParse(array[0]); var idDispositivo = array[1].toString(); if (acao != null && idDispositivo.isNotEmpty) { int disIndex = serverConnection.equipamentos .indexWhere((x) => x.serverId == idDispositivo); if (disIndex != -1) { DispositivoModel dis = serverConnection.equipamentos[disIndex]; if (dis.sep != null) { sepService.showDialogAlertaAcionado(dis); } else if (disp.port != null) { gateService.showGateStatus( Routes.navigatorKey!.currentContext!, dis); } } } } Navigator.of(Routes.navigatorKey!.currentContext!) .pushReplacementNamed(payload); } } showNotification(RemoteMessage message) async { print('showNotification'); var user = await accountService.getUser(); print('isLoggedIn ${accountService.isLoggedIn}'); print('isLoggedIn ${user}'); if (accountService.isLoggedIn == true && user != null) { Future<RingerModeStatus> soundModeAparelho = _verificaModoDeSomAtualDispositivo(); print('Retorno do verificaSom $soundModeAparelho'); if (soundModeAparelho == RingerModeStatus.silent) { Future.delayed(const Duration(seconds: 9), () async { _conteudoNotificacao(message); }); } else { _conteudoNotificacao(message); } } } _conteudoNotificacao(RemoteMessage message) { RemoteMessageData data = RemoteMessageData.fromJson(message.data); sound = data.sound != 'default' && data.sound != null ? data.sound ?? 'gate' : 'gate'; //sound = "assets/$sound.mp3"; print('sound $sound'); AndroidNotificationChannel channel = AndroidNotificationChannel( 'Connector $sound', 'ConnectorChannel', description: '', importance: Importance.high, sound: RawResourceAndroidNotificationSound(sound), //sound: UriAndroidNotificationSound("assets/$sound"), enableVibration: true, enableLights: true, ); plugin = FlutterLocalNotificationsPlugin(); String title = 'Connector'; if (data.route != null) { var array = data.route!.split('/'); if (array.length == 2) { var acao = int.tryParse(array[0]); var idDispositivo = array[1].toString(); if (acao != null && idDispositivo.isNotEmpty) { int disIndex = serverConnection.equipamentos .indexWhere((x) => x.serverId == idDispositivo); if (disIndex != -1) { DispositivoModel dis = serverConnection.equipamentos[disIndex]; if (dis.sep != null) { title = 'SEP'; } else if (dis.port != null) { title = 'Portão'; } } } } } plugin.show( message.hashCode, title, data.body, NotificationDetails( android: AndroidNotificationDetails( channel.id, channel.name, channelDescription: channel.description, importance: channel.importance, priority: Priority.high, showProgress: true, enableLights: true, enableVibration: true, visibility: NotificationVisibility.public, sound: RawResourceAndroidNotificationSound(sound), //sound: UriAndroidNotificationSound("assets/$sound"), ), iOS: IOSNotificationDetails( presentSound: true, presentBadge: true, presentAlert: true, //sound: '$sound.mp3', sound: 'assets/$sound.mp3', ), ), payload: data.route, ); }
使用Xcode构建项目时,始终报错:
"name of parameter 'onSelectNotification' isn't defined in the class"
我已尝试将参数替换为onDidReceiveNotificationResponse,并将Flutter从3.0.5升级到3.3.9,但问题仍未解决。
相关环境信息:
Current flutter: 3.3.9 Xcode: 13.4.1 macOS: Monterey Profile's OS version: ios 12
后续会提供flutter doctor、Dart版本等更多信息,盼求帮助。
内容的提问来源于stack exchange,提问作者César Espíndola
相关产品推荐
相关产品推荐

