Flutter本地通知不触发且报<asynchronous suspension>错误如何解决
问题原因
你遇到的MissingPluginException错误核心是flutter_local_notifications插件未完成初始化配置,原生侧和Flutter侧的方法通道没有建立成功,和你拉取API的逻辑无关。
解决步骤
第一步:给
notification_api.dart补充初始化方法
完整的notification_api.dart代码如下:import 'package:flutter_local_notifications/flutter_local_notifications.dart'; class NotificationApi{ static final _notifications = FlutterLocalNotificationsPlugin(); // 新增初始化方法 static Future init() async { const AndroidInitializationSettings initializationSettingsAndroid = AndroidInitializationSettings('@mipmap/ic_launcher'); const IOSInitializationSettings initializationSettingsIOS = IOSInitializationSettings( requestAlertPermission: true, requestBadgePermission: true, requestSoundPermission: true, ); const InitializationSettings initializationSettings = InitializationSettings( android: initializationSettingsAndroid, iOS: initializationSettingsIOS, ); await _notifications.initialize(initializationSettings); } static Future _notificationDetails() async{ return const NotificationDetails( android: AndroidNotificationDetails( // 通道ID建议去掉空格,避免部分安卓版本兼容问题 'channel_id', 'channel name', channelDescription: 'channel description', importance: Importance.max ), iOS: IOSNotificationDetails(), ); } static Future showNotification({ int id = 0, String? title, String? body, String? payload, }) async => _notifications.show( id, title, body, await _notificationDetails(), payload: payload, ); }第二步:修改
main.dart的入口函数,启动前先初始化通知插件
修改后的main函数代码:void main() async { // 确保Flutter绑定初始化完成再执行原生相关操作 WidgetsFlutterBinding.ensureInitialized(); // 初始化通知插件 await NotificationApi.init(); runApp(const MyApp()); }第三步:补充Android平台基础配置
打开android/app/src/main/AndroidManifest.xml,在manifest标签下添加Android13+的通知权限:<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />同时确认
android/app/build.gradle里的compileSdkVersion至少为33,避免高版本安卓兼容问题。第四步:完全重启应用
更改原生相关配置后,热重载/热重启不会生效,需要完全停止当前运行的应用,执行flutter clean→flutter pub get后重新运行即可。
额外优化点
按钮的点击事件最好添加await等待通知方法执行完成,避免异步操作丢包:
ElevatedButton( onPressed: () async { await NotificationApi.showNotification( title: 'hello', body: 'sup', ); }, child: const Text("Local Notification"), )
内容的提问来源于stack exchange,提问作者chogyal
相关产品推荐
相关产品推荐

