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

Flutter应用运行报错:IOSInitializationSettings及onSelectNotification问题

Flutter本地通知插件初始化错误修复方案

错误列表

  • lib/helper/notification_helper.dart:16:29: 找不到构造函数IOSInitializationSettings
  • lib/helper/notification_helper.dart:18:73: initialize方法不存在onSelectNotification命名参数
  • lib/view/screens/chat/chat_screen.dart:43:33: 找不到构造函数IOSInitializationSettings

问题根源

这些错误源于你使用了flutter_local_notifications插件的最新版本,但代码仍基于旧版API编写。新版本API有两处关键变更:

  1. IOSInitializationSettings 重命名为 DarwinInitializationSettings(统一支持iOS、macOS等苹果生态平台)
  2. onSelectNotification 参数从initialize方法中移除,改为在初始化配置中通过onDidReceiveNotificationResponse回调处理通知点击事件

修复步骤

1. 替换初始化配置类并调整回调逻辑

修改notification_helper.dart中的初始化代码

原代码:

var androidInitialize = new AndroidInitializationSettings('notification_icon');
var iOSInitialize = new IOSInitializationSettings();
var initializationsSettings = new InitializationSettings(android: androidInitialize, iOS: iOSInitialize);
flutterLocalNotificationsPlugin.initialize(initializationsSettings, onSelectNotification: (String payload) async {
  try{
    if(payload != null && payload.isNotEmpty) {
      MyApp.navigatorKey.currentState.push(
          MaterialPageRoute(builder: (context) => OrderDetailsScreen(orderModel: null, orderId: int.parse(payload))));
    }
  }catch (e) {}
  return;
});

修改后:

var androidInitialize = const AndroidInitializationSettings('notification_icon');
var darwinInitialize = const DarwinInitializationSettings();
var initializationsSettings = InitializationSettings(
  android: androidInitialize,
  iOS: darwinInitialize,
);
await flutterLocalNotificationsPlugin.initialize(
  initializationsSettings,
  onDidReceiveNotificationResponse: (NotificationResponse response) async {
    try {
      final payload = response.payload;
      if (payload != null && payload.isNotEmpty) {
        MyApp.navigatorKey.currentState?.push(
          MaterialPageRoute(builder: (context) => OrderDetailsScreen(orderModel: null, orderId: int.parse(payload))),
        );
      }
    } catch (e) {}
  },
);
修改chat_screen.dart中的初始化代码

原代码:

var androidInitialize = const AndroidInitializationSettings('notification_icon');
var iOSInitialize = const IOSInitializationSettings();
var initializationsSettings = InitializationSettings(android: androidInitialize, iOS: iOSInitialize);
flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin();
flutterLocalNotificationsPlugin.initialize(initializationsSettings);

修改后:

var androidInitialize = const AndroidInitializationSettings('notification_icon');
var darwinInitialize = const DarwinInitializationSettings();
var initializationsSettings = InitializationSettings(
  android: androidInitialize,
  iOS: darwinInitialize,
);
flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin();
await flutterLocalNotificationsPlugin.initialize(initializationsSettings);

2. 确认导入正确的类

确保文件顶部已导入flutter_local_notifications插件的核心类(若已导入可忽略):

import 'package:flutter_local_notifications/flutter_local_notifications.dart';

3. 可选:适配苹果平台的额外权限配置

如果需要自定义iOS/macOS的通知权限或样式,可在DarwinInitializationSettings中添加参数:

var darwinInitialize = const DarwinInitializationSettings(
  requestAlertPermission: true,
  requestBadgePermission: true,
  requestSoundPermission: true,
);

验证修复

执行命令同步依赖:

flutter pub get

重新运行应用,错误即可解决。

内容的提问来源于stack exchange,提问作者Abdelrahman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 13:17:01