如何使用flutter_local_notifications修改Android通知托盘图标
Android通知托盘图标显示纯白的修复方案(适用于flutter_local_notifications ^9.6.1)
核心原因
Android 5.0(API 级别21)及以上版本对通知小图标有强制规范:必须使用透明背景、仅保留alpha通道的单色白色前景图标。如果传入带彩色填充、不透明背景的普通应用图标,系统会自动将所有非透明区域统一渲染为纯白色,就会出现展开通知托盘后图标全白的问题。状态栏小图标因为展示尺寸极小,视觉上不容易暴露规范问题,但本质也不符合系统要求。
操作步骤
- 第一步:制作符合规范的通知图标
按照Android官方尺寸规范制作对应分辨率的PNG图标:- mdpi密度:24*24px
- hdpi密度:36*36px
- xhdpi密度:48*48px
- xxhdpi密度:72*72px
- xxxhdpi密度:96*96px
图标要求:仅保留白色的前景图案,背景区域必须完全透明,不能有任何彩色填充、不透明底色。制作完成后将图标放入Android工程android/app/src/main/res/下对应分辨率的drawable/mipmap目录,文件命名统一使用小写字母、数字、下划线,例如命名为ic_notification.png。
- 第二步:在插件初始化时配置默认图标
初始化flutter_local_notifications的Android配置项时,传入正确的图标资源引用,注意不要带文件后缀:// 图标放在mipmap目录用@mipmap/前缀,放在drawable目录用@drawable/前缀 const AndroidInitializationSettings androidInitSettings = AndroidInitializationSettings('@mipmap/ic_notification'); final InitializationSettings initSettings = InitializationSettings( android: androidInitSettings, ); await flutterLocalNotificationsPlugin.initialize(initSettings);如果需要给单条通知单独设置图标,在构造
AndroidNotificationDetails时给icon字段传入同样格式的资源引用即可,单条配置的优先级高于初始化时的全局默认配置。 - 第三步:验证配置生效
配置完成后不要使用热重载/热重启,先执行flutter clean清除构建缓存,彻底卸载设备上的旧版本应用,重新全新安装构建包即可看到正常的图标效果。
常见问题排查
- 如果重新安装后还是白块,优先检查图标文件:确认背景是100%透明,不要把带圆角底色的应用logo直接当通知图标用
- 如果需要修改通知图标的显示颜色,可以在
AndroidNotificationDetails中通过color参数传入指定色值,系统会将单色图标渲染为你设置的颜色
内容的提问来源于stack exchange,提问作者Agung
相关产品推荐
相关产品推荐

