Flutter应用运行报错:IOSInitializationSettings及onSelectNotification问题
Flutter本地通知插件初始化错误修复方案
错误列表
lib/helper/notification_helper.dart:16:29: 找不到构造函数IOSInitializationSettingslib/helper/notification_helper.dart:18:73:initialize方法不存在onSelectNotification命名参数lib/view/screens/chat/chat_screen.dart:43:33: 找不到构造函数IOSInitializationSettings
问题根源
这些错误源于你使用了flutter_local_notifications插件的最新版本,但代码仍基于旧版API编写。新版本API有两处关键变更:
IOSInitializationSettings重命名为DarwinInitializationSettings(统一支持iOS、macOS等苹果生态平台)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
相关产品推荐
相关产品推荐

