使用flutter_local_notifications:^9.0.1发安卓通知时报空指针异常如何解决?
从错误堆栈的setSmallIcon空指针报错可以直接定位问题:你没有完成flutter_local_notifications的安卓基础配置,也没有对插件做初始化操作,按下面步骤修改即可:
解决步骤
1. 配置通知小图标资源
准备一张透明背景的剪影png图标,放到安卓项目的android/app/src/main/res/drawable目录下,命名为ic_notification.png(不要用彩色图标,安卓5.0及以上版本通知图标会强制提取alpha通道,彩色图标会显示为白色块)。
如果你的应用适配安卓13(API 33)及以上版本,还需要在android/app/src/main/AndroidManifest.xml里添加通知权限:
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
2. 初始化通知插件
你当前的代码完全没有初始化插件的逻辑,在应用启动时(比如主页State的initState方法里)添加初始化代码:
Future<void> initNotificationPlugin() async { // 安卓初始化配置,指定全局默认通知小图标 const AndroidInitializationSettings androidInit = AndroidInitializationSettings('ic_notification'); const InitializationSettings initSettings = InitializationSettings(android: androidInit); // 调用插件初始化 await NotificationApi._notifications.initialize(initSettings); // 安卓13以上申请通知权限 await NotificationApi._notifications .resolvePlatformSpecificImplementation<AndroidFlutterLocalNotificationsPlugin>() ?.requestNotificationsPermission(); }
3. 可选:单独为指定通知配置小图标
你也可以在AndroidNotificationDetails中单独为当前通知指定小图标,优先级高于全局初始化配置:
static Future _notificationDetails() async { return const NotificationDetails( android: AndroidNotificationDetails( 'channel id', 'channel name', channelDescription: 'channel description', importance: Importance.max, // 单独指定当前通知小图标 smallIcon: DrawableResourceAndroidBitmap('ic_notification'), ), ); }
所有修改完成后冷重启应用(热重载不生效,需要完全关闭再打开),再点击测试按钮即可正常发送通知。
内容的提问来源于stack exchange,提问作者Toska 003
相关产品推荐
相关产品推荐

