flutter:icons_launcher和flutter_native_splash

两者区别

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.storyboardAndroid 的 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:配置启动背景。

也就是说,如果只有 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 的启动页也替换掉 ✅

×

喜欢就点赞,疼爱就打赏