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
修复步骤
修正AndroidNotificationDetails参数错误
原代码中'channel id'和'channel name'未用逗号分隔,导致参数传递错误,这是核心语法问题。修改后:AndroidNotificationDetails( 'channel id', 'channel name', 'channel description', importance: Importance.high, )修正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);添加初始化步骤
在使用通知前需初始化插件,建议在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
相关产品推荐
相关产品推荐

