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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 07:35:20