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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:06:07