两者区别
icons_launcher 只管 应用图标
- 它的职责:生成 App 的图标资源(mipmap/ic_launcher)。
- Android 12+ 的启动页 确实会用这个图标,所以你感觉像是改了启动图。
- 但它 不能控制:
- 启动页的背景色
- 深色模式的适配
- Android 11 及以下的全屏背景图
- iOS 的 LaunchScreen
icons_launcher无法影响iOS的启动页
在 iOS 里,启动页(Launch Screen)完全由系统控制,不是你自己在 Flutter 里写的 Widget。
- iOS 要求 必须有一个启动页,否则 App 可能会因为没有合适的启动界面而被拒审。
- 启动页由
LaunchScreen.storyboard控制(以前是LaunchImage静态图片,现在苹果强制要求 storyboard)。 - 系统在 App 启动时会立即显示
LaunchScreen.storyboard,直到 Flutter 引擎初始化并显示你真正的runApp()UI。 - iOS的启动页只能放静态的 图片 / 背景色 / label 等 UI 元素。如果你放了一张图片,它确实会被 系统强制拉伸/填满屏幕,除非你自己在 storyboard 里设置 内容模式 (Content Mode),比如
Aspect Fit才会保持比例。
icons_launcher 做的事
修改 App 图标(iOS 的
AppIcon.appiconset,Android 的 mipmap 文件夹)。也就是用户在 桌面上看到的 App 图标。它不会动 iOS 启动页 (Launch Screen),因为启动页是由
LaunchScreen.storyboard控制的,和 app icon 没关系。
flutter_native_splash 做的事
修改 iOS 的
LaunchScreen.storyboard和 Android 的launch_background.xml。控制 App 启动时显示的页面(背景色、图片、logo)。
也就是说,只有
flutter_native_splash能影响 iOS 启动页。
flutter_native_splash 负责启动页外观
- 它的职责:生成和配置 Native 启动图,包括:
- Android 11 及以下:
launch_background.xml→ 可以设置背景图、全屏 logo。 - Android 12+:配置
styles.xml,决定 icon 背景色、暗色模式颜色。 - iOS:修改
LaunchScreen.storyboard,设置背景和 logo。 - Web:配置启动背景。
- Android 11 及以下:
也就是说,如果只有 icons_launcher,你只能在 Android 12+ 上“碰巧”改了启动时的图标,但:
- iOS 还是 Flutter 默认 logo。
- Android 11 及以下还是 Flutter 默认 logo。
- Android 12+ 启动页背景只能是系统默认的白色,不能改颜色。
举个例子
假设你想要这样的启动效果:
- 背景:蓝色
- 图标:小猫 logo
- 深色模式:黑色背景 + 白色 logo
用 icons_launcher 单独做:
图标可以换成小猫logo。
Android 12+ 启动页还是白色背景(改不了)。
Android 11 以下、iOS 还是白屏。

用 icons_launcher + flutter_native_splash:
- 图标:白色 logo ✅
- 背景色:蓝色 ✅
- 深色模式适配 ✅
- Android 11 以下和 iOS 的启动页也替换掉 ✅