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

Flutter点击文本按钮触发本地推送通知时出现报错求助

Flutter本地推送报错解决

问题情况

点击按钮触发本地推送通知时出现报错,已尝试重装应用、多次重启,搜索解决方案后仍无法修复。

报错日志

E/flutter ( 8853):  at android.os.Handler.handleCallback(Handler.java:938)
E/flutter ( 8853):  at android.os.Handler.dispatchMessage(Handler.java:99)
E/flutter ( 8853):  at android.os.Looper.loop(Looper.java:223)
E/flutter ( 8853):  at android.app.ActivityThread.main(ActivityThread.java:7656)
E/flutter ( 8853):  at java.lang.reflect.Method.invoke(Native Method)
E/flutter ( 8853):  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
E/flutter ( 8853):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
E/flutter ( 8853): )
E/flutter ( 8853): #0      StandardMethodCodec.decodeEnvelope
package:flutter/…/services/message_codecs.dart:653
E/flutter ( 8853): #1      MethodChannel._invokeMethod
package:flutter/…/services/platform_channel.dart:296
E/flutter ( 8853): <asynchronous suspension>
E/flutter ( 8853): #2      FlutterLocalNotificationsPlugin.show
package:flutter_local_notifications/src/flutter_local_notifications_plugin.dart:234
E/flutter ( 8853): <asynchronous suspension>

相关代码

import 'package:flutter_local_notifications/flutter_local_notifications.dart';

class NotificationApi {
  static final _notification = FlutterLocalNotificationsPlugin();

  static Future _notificationDetails() async {
    return const NotificationDetails(
      android: AndroidNotificationDetails(
        'channel id'
            'channel name',
        'channel description',
        importance: Importance.high,
      ),
      iOS: DarwinNotificationDetails(),
    );
  }

  static Future showNotification({
    int id = 0,
    String? title,
    String? body,
    String? payload,
  }) async =
      _notification.show(id, title, body, await _notificationDetails(),
          payload: payload);
}

依赖版本

flutter_local_notifications: ^12.0.3+1

修复步骤

  1. 修正AndroidNotificationDetails参数错误
    原代码中'channel id'和'channel name'未用逗号分隔,导致参数传递错误,这是核心语法问题。修改后:

    AndroidNotificationDetails(
      'channel id',
      'channel name',
      'channel description',
      importance: Importance.high,
    )
    
  2. 修正showNotification函数语法
    原代码中async =是错误写法,Dart中简写异步函数需用async =>:

    static Future showNotification({
      int id = 0,
      String? title,
      String? body,
      String? payload,
    }) async =>
        _notification.show(id, title, body, await _notificationDetails(),
            payload: payload);
    
  3. 添加初始化步骤
    在使用通知前需初始化插件,建议在main函数中添加:

    Future<void> main() async {
      WidgetsFlutterBinding.ensureInitialized();
      const AndroidInitializationSettings initializationSettingsAndroid =
          AndroidInitializationSettings('@mipmap/ic_launcher');
      const InitializationSettings initializationSettings =
          InitializationSettings(android: initializationSettingsAndroid);
      await NotificationApi._notification.initialize(initializationSettings);
      runApp(const MyApp());
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 04:50:26