Flutter flutter_native_splash 使用指南
Flutter flutter_native_splash 使用指南

视频
https://youtu.be/dGq6LbipvXA
https://www.bilibili.com/video/BV1d52tYFEzz/
前言
原文 使用 flutter_native_splash 优化 Flutter 启动画面体验
本文详细介绍了如何在 Flutter 中使用 flutter_native_splash 插件自定义启动画面,包括背景颜色、图像设置及 Android 12 的支持说明,帮助开发者提升应用的用户体验。
参考
- https://pub.dev/packages/flutter_native_splash
- https://pub.dev/packages/flutter_native_splash#android-12-support
- https://developer.android.com/about/versions/12/features/splash-screen
正文
依赖包
pubspec.yaml
dev_dependencies:# 启动屏flutter_native_splash: ^2.4.1
flutter_native_splash 插件放在开发依赖,这样就不用打包到发布版本中,减少 APP 尺寸。
android 11 及以下
pubspec.yaml
flutter_native_splash:background_image: "assets/launcher/background.png"
生成启动屏
$ dart run flutter_native_splash:createBuilding package executable...
Built flutter_native_splash:create.
[Android] Creating default android12splash images
[Android] Creating dark mode android12splash images
[Android] Updating launch background(s) with splash image path...
[Android] - android/app/src/main/res/drawable/launch_background.xml
[Android] - android/app/src/main/res/drawable-v21/launch_background.xml
[Android] Updating styles...
[Android] - android/app/src/main/res/values-v31/styles.xml
[Android] - android/app/src/main/res/values-night-v31/styles.xml
[Android] - android/app/src/main/res/values/styles.xml
[Android] - android/app/src/main/res/values-night/styles.xml
[iOS] Updating ios/Runner/Info.plist for status bar hidden/visible
对应的,你也可以删除掉。
$ dart run flutter_native_splash:removeBuilding package executable...
Built flutter_native_splash:remove.
Restoring Flutter's default native splash screen...
[Android] Deleting android12splash.png
[Android] Deleting android12splash.png
[Android] Deleting android12splash.png
[Android] Deleting android12splash.png
[Android] Deleting android12splash.png
[Android] Deleting android12splash.png
[Android] Deleting android12splash.png
[Android] Deleting android12splash.png
[Android] Deleting android12splash.png
[Android] Deleting android12splash.png
[Android] Updating launch background(s) with splash image path...
[Android] - android/app/src/main/res/drawable/launch_background.xml
[Android] - android/app/src/main/res/drawable-night/launch_background.xml
[Android] - android/app/src/main/res/drawable-v21/launch_background.xml
[Android] - android/app/src/main/res/drawable-night-v21/launch_background.xml
[Android] Updating styles...
[Android] - android/app/src/main/res/values-v31/styles.xml
[Android] - android/app/src/main/res/values-night-v31/styles.xml
[Android] - android/app/src/main/res/values/styles.xml
[Android] - android/app/src/main/res/values-night/styles.xml
[iOS] Updating ios/Runner/Info.plist for status bar hidden/visible
如果你目标机器 android 11 这样,就会有一张图片被拉伸的情况占满屏幕。

ios 启动图
pubspec.yaml
flutter_native_splash:background_image_ios: "assets/launcher/background.png"
记得
dart run flutter_native_splash:create, 每次修改都需要重新创建,之后将不再重复说。

android 12 图标启动图
android 12 之后启动方式改成图标启动,下面是文章说明。
https://pub.dev/packages/flutter_native_splash#android-12-support
https://developer.android.com/develop/ui/views/launch/splash-screen?hl=zh-cn

pubspec.yaml
flutter_native_splash:color_android: "#f6eee4"android_12:image: "assets/launcher/android12.png"icon_background_color: "#324ea1"
分别设置了,启动视图背景、图标、图标背景。

同时支持 android 11 及以下, 12 以上,IOS
pubspec.yaml
flutter_native_splash:background_image_android: "assets/launcher/background.png"background_image_ios: "assets/launcher/background.png"android_12:image: "assets/launcher/android12.png"icon_background_color: "#324ea1"
这样配置后的结果如下:
- android 11 及以下满屏拉伸启动图
- ios 满屏拉伸启动图
- android 12 图标带图标背景启动图
手动释放启动图
这种方式不推荐,两个理由:
- 增加发布包 app 的尺寸
- 容易出错,如忘记
remove()会卡在启动图。
配置清单
flutter_native_splash:# 这个包生成原生代码,以自定义 Flutter 的默认白色启动屏幕# 通过背景颜色和启动图像进行定制。# 自定义下面的参数,并在终端中运行以下命令:# dart run flutter_native_splash:create# 要恢复 Flutter 的默认白色启动屏幕,请在终端中运行以下命令:# dart run flutter_native_splash:remove# 重要说明:这些参数不影响 Android 12 及更高版本的配置,# 因为这些版本的启动屏幕处理方式与之前的 Android 版本不同。# Android 12 及更高版本必须在下面的 android_12 部分中进行特定配置。# color 或 background_image 是唯一的必需参数。使用 color 设置启动屏幕的背景# 为纯色。使用 background_image 设置启动屏幕的背景为 PNG 图片。# 这对于渐变效果很有用。图片将被拉伸到应用的大小。只能使用一个参数,# color 和 background_image 不能同时设置。color: "#42a5f5"#background_image: "assets/background.png"# 可选参数如下。要启用某个参数,请通过删除前面的 # 字符来取消注释该行。# image 参数允许你指定用于启动屏幕的图片。必须是 PNG 文件,且应为 4x 像素密度调整大小。#image: assets/splash.png# branding 属性允许你指定用于启动屏幕的品牌图片。# 必须是 PNG 文件。支持 Android、iOS 和 Web。对于 Android 12,# 请参见下面的 Android 12 部分。#branding: assets/dart.png# 要将品牌图像定位在屏幕底部,可以使用 bottom、bottomRight 和 bottomLeft。# 如果未指定或指定其他内容,默认值为 bottom。#branding_mode: bottom# 设置品牌图像与屏幕底部的间距。默认值为 0。# branding_bottom_padding: 24# color_dark、background_image_dark、image_dark 和 branding_dark 是在设备处于暗模式时设置的参数。# 如果未指定,将使用上述参数。如果指定了 image_dark 参数,则必须指定 color_dark 或# background_image_dark。color_dark 和 background_image_dark 不能同时设置。#color_dark: "#042a49"#background_image_dark: "assets/dark-background.png"#image_dark: assets/splash-invert.png#branding_dark: assets/dart_dark.png# 从 Android 12 开始,启动屏幕的处理方式与之前的版本不同。# 请访问 https://developer.android.com/guide/topics/ui/splash-screen# 以下是 Android 12+ 的特定参数。android_12:# image 参数设置启动屏幕图标图片。如果未指定该参数,# 将使用应用的启动图标。# 请注意,启动屏幕将裁剪为屏幕中央的圆形。# 带图标背景的应用图标:应为 960×960 像素,并适合于直径为 640 像素的圆形。# 无图标背景的应用图标:应为 1152×1152 像素,并适合于直径为 768 像素的圆形。#image: assets/android12splash.png# 启动屏幕背景颜色。#color: "#42a5f5"# 应用图标背景颜色。#icon_background_color: "#111111"# branding 属性允许你指定用于启动屏幕的品牌图片。#branding: assets/dart.png# image_dark、color_dark、icon_background_color_dark 和 branding_dark 设置在设备处于暗模式时# 应用的值。如果未指定,将使用上述参数。#image_dark: assets/android12splash-invert.png#color_dark: "#042a49"#icon_background_color_dark: "#eeeeee"# android、ios 和 web 参数可用于禁用在给定平台上生成启动屏幕。#android: false#ios: false#web: false# 可以使用以下参数指定平台特定的图像,这些参数将覆盖相应的参数。# 你可以指定所有、选定或不指定这些参数:#color_android: "#42a5f5"#color_dark_android: "#042a49"#color_ios: "#42a5f5"#color_dark_ios: "#042a49"#color_web: "#42a5f5"#color_dark_web: "#042a49"#image_android: assets/splash-android.png#image_dark_android: assets/splash-invert-android.png#image_ios: assets/splash-ios.png#image_dark_ios: assets/splash-invert-ios.png#image_web: assets/splash-web.gif#image_dark_web: assets/splash-invert-web.gif#background_image_android: "assets/background-android.png"#background_image_dark_android: "assets/dark-background-android.png"#background_image_ios: "assets/background-ios.png"#background_image_dark_ios: "assets/dark-background-ios.png"#background_image_web: "assets/background-web.png"#background_image_dark_web: "assets/dark-background-web.png"#branding_android: assets/brand-android.png#branding_bottom_padding_android: 24#branding_dark_android: assets/dart_dark-android.png#branding_ios: assets/brand-ios.png#branding_bottom_padding_ios: 24#branding_dark_ios: assets/dart_dark-ios.png#branding_web: assets/brand-web.gif#branding_dark_web: assets/dart_dark-web.gif# 启动图像的位置可以使用 android_gravity、ios_content_mode 和# web_image_mode 参数进行设置。所有默认值为中心。## android_gravity 可以是以下 Android Gravity 的其中之一(见# https://developer.android.com/reference/android/view/Gravity):bottom、center、# center_horizontal、center_vertical、clip_horizontal、clip_vertical、end、fill、fill_horizontal、# fill_vertical、left、right、start 或 top。#android_gravity: center## ios_content_mode 可以是以下 iOS UIView.ContentMode 的其中之一(见# https://developer.apple.com/documentation/uikit/uiview/contentmode):scaleToFill、# scaleAspectFit、scaleAspectFill、center、top、bottom、left、right、topLeft、topRight、# bottomLeft 或 bottomRight。#ios_content_mode: center## web_image_mode 可以是以下模式之一:center、contain、stretch 和 cover。#web_image_mode: center# 可以使用 android_screen_orientation 参数设置 Android 的屏幕方向。# 有效参数可以在这里找到:# https://developer.android.com/guide/topics/manifest/activity-element#screen#android_screen_orientation: sensorLandscape# 要隐藏通知栏,请使用 fullscreen 参数。由于 Web# 没有通知栏,因此该参数无效。默认值为 false。# 注意:与 Android 不同,iOS 在应用加载时不会自动显示通知栏。# 要显示通知栏,请在你的 Flutter 应用中添加以下代码:# WidgetsFlutterBinding.ensureInitialized();# SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: [SystemUiOverlay.bottom, SystemUiOverlay.top], );#fullscreen: true# 如果你更改了 info.plist 文件的名称,可以使用 info_plist_files 参数指定文件名。# 仅删除下面三行中的 # 字符,不要删除任何空格:#info_plist_files:# - 'ios/Runner/Info-Debug.plist'# - 'ios/Runner/Info-Release.plist'
小结
在本文中,我们探讨了如何在 Flutter 中使用 flutter_native_splash 插件来自定义启动画面。通过设置背景颜色和图像,开发者可以提升应用的用户体验。特别是在 Android 12 及以上版本中,了解启动画面的处理方式尤为重要。希望本文能帮助你更好地掌握 flutter_native_splash 的使用,提升 Flutter 应用的启动效果。
感谢阅读本文
如果有什么建议,请在评论中让我知道。我很乐意改进。
猫哥 APP
- SaaS Fast
- Flutter GetX Generator
flutter 学习路径
- Flutter 优秀插件推荐
- Flutter 基础篇1 - Dart 语言学习
- Flutter 基础篇2 - 快速上手
- Flutter 实战1 - Getx Woo 电商APP
- Flutter 实战2 - 上架指南 Apple Store、Google Play
- Flutter 基础篇3 - 仿微信朋友圈
- Flutter 实战3 - 腾讯即时通讯 第一篇
- Flutter 实战4 - 腾讯即时通讯 第二篇
© 猫哥
ducafecat.com
end
相关文章:
Flutter flutter_native_splash 使用指南
Flutter flutter_native_splash 使用指南 视频 https://youtu.be/dGq6LbipvXA https://www.bilibili.com/video/BV1d52tYFEzz/ 前言 原文 使用 flutter_native_splash 优化 Flutter 启动画面体验 本文详细介绍了如何在 Flutter 中使用 flutter_native_splash 插件自定义启动…...
谷歌审核放宽,恶意软件不再封号?是反垄断案影响还是开发者们的错觉
最近,谷歌因其“垄断”案而成为科技行业的焦点,这个案件可能导致谷歌业务的重大调整。同时,在Google Play上,一些开发者发现谷歌审核好像放宽了不少,这是不是与反垄断有关,谷歌应用上架或将迎来春天&#x…...
C++实现一个线程池
原文链接:C实现一个线程池 介绍 线程池是提高CPU利用率的一个非常高效的方法,线程池就是通过预先创建多个线程,当有任务时就执行,无任务时就阻塞. 相比一般的多线程方法,线程池更加简单,模块化,并且效率更高,因为不会重复创建删除线程. 预备知识 异步线程(包括f…...
为什么inet_ntoa会返回错误的IP地址?
目录 1、调用inet_addr和inet_ntoa实现整型IP与点式字符串之间的转换 1.1、调用inet_addr将点式字符串IP转换成整型IP 1.2、调用inet_ntoa将整型IP转换成点式字符串IP 2、调用inet_ntoa返回错误点式字符串IP的原因分析 3、解决多线程调用inet_ntoa返回错误点式字符串IP的办…...
编码风格之(8)C++语言规范(Google风格)3.md
编码风格之(8)C特性规范(Google风格)3 Author: Once Day Date: 2024年10月12日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 全系列文章可参考专栏: 源码分析_Once-Day的…...
openrtp 音视频时间戳问题
解决音视频发送的rtp问题 openrtp增加了音频aac的发送,地址 OpenRTP Gitee开源地址 同时使用两个rtp ,来发送音频和视频 使用以下音频rtp,是可以发送和接收的,音频端口在视频端口上2 v0 o- 0 0 IN IP4 127.0.0.1 sMy Stream cI…...
了解Android中为什么需要多线程?
在Android开发中,多线程是一个至关重要的概念。理解并合理应用多线程,可以显著提升应用的性能和用户体验。 一、Android多线程的基本概念 1. 主线程与UI线程 在Android中,主线程也称为UI线程,它负责处理用户输入、事件分发、绘…...
Kaggle Python练习:使用外部库(Exercise: Working with External Libraries)
文章目录 问题1:坐标轴及标签显示问题2:赢得比赛的最佳项目并计数问题3:21点游戏方法1:把超过21点的最后记为0方法2:把超过21点在最后进行判断方法3:官方代码与方法2相似 问题1:坐标轴及标签显示…...
React 子组件调用父组件的方法,以及互相传递数据
<script type"text/babel" data-type"module"> import React, { StrictMode, useState } from react; import { createRoot } from react-dom/client;const ParentComponent () > {const [message, setMessage] useState("")//父组件…...
爬虫基础---python爬虫系列2
爬虫基础 文章目录 爬虫基础爬虫简介爬虫的用途爬虫的合法性规避风险看懂协议反爬机制反反爬策略 认识HTTPHTTP协议--HyperText Transfer ProtocolHTML--HyperText Markup LanguageHTTPS如何查看网站是什么协议呢使用端口号 URL组成部分详解常用的请求- Request Method常见的请…...
jmeter在beanshell中使用props.put()方法的注意事项
在jmeter中,通常使用beanshell去处理一些属性的设置和获取的操作,而这些操作也是有一定的规则的。 1. 设置属性时,在属性名上要加双引号,这代表它不是一个需要用var去声明的变量 这种设置属性的方式才是有效可行的,在…...
息肉检测数据集 yolov5 yolov8适用于目标检测训练已经调整为yolo格式可直接训练yolo网络
息肉检测数据集 yolov5 yolov8格式 息肉检测数据集介绍 数据集概述 名称:息肉检测数据集(基于某公开的分割数据集调整)用途:适用于目标检测任务,特别是内窥镜图像中的息肉检测格式:YOLO格式(边…...
通过API进行Milvus实例配置
更新Milvus各个组件的配置参数。 调试 您可以在OpenAPI Explorer中直接运行该接口,免去您计算签名的困扰。运行成功后,OpenAPI Explorer可以自动生成SDK代码示例。 编辑调试 授权信息 下表是API对应的授权信息,可以在RAM权限策略语句的…...
Excelize 开源基础库 2.9.0 版本正式发布
Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库,基于 ECMA-376,ISO/IEC 29500 国际标准。可以使用它来读取、写入由 Excel、WPS、OpenOffice 等办公软件创建的电子表格文档。支持 XLAM / XLSM / XLSX / XLTM / XLTX 等多种文档格式…...
人脸识别-特征算法
文章目录 一、LBPH算法1.基本原理2.实现步骤3.代码实现 二、Eigenfaces算法1.特点2.代码实习 三、FisherFaces算法1.算法原理2.算法特点3.代码实现 四、总结 人脸识别特征识别器是数字信息发展中的一种生物特征识别技术,其核心在于通过特定的算法和技术手段…...
C++【内存管理】(超详细讲解C++内存管理以及new与delete的使用和原理)
文章目录 1.C/C内存分布2.C语言中动态内存管理方式3.C内存管理方式3.1 new/delete操作内置类型3. 2new/delete操作自定义类型 4. operator new与operator delete函数(重点)5. new和delete的实现原理5.1 内置类型5.2 自定义类型5.2.1 自定义类型调用new[]…...
elementUi el-table 表头高度异常问题
1、现象 在同一个页面通过状态切换不同table时,当从有合并标头行的table切换到无合并表头的table时,无合并表头的table的表头的高度异常了,如下图 切换后 2、解决 给每个el-table 加上一个唯一的key <el-table key"1"></…...
kubekey的应用
随着 Kubernetes 社区的不断发展,即将迎来 Kubernetes 1.30 版本的迭代。在早先的 1.24 版本中,社区作出一个重要决策:不再默认集成 Docker 作为容器运行时,即取消了对 Docker 的默认支持。这就像咱们家厨房换了个新灶头ÿ…...
如何识别并分类转录因子的家族
愿武艺晴小朋友一定得每天都开心 当我们有了差异表达的转录因子列表以后,接下来可能就想知道这些转录因子的家族分布情况是怎样的?有没有1-2个Family在其中起主要作用,占比较多。 基于这种需求,可以按以下几步来实现: 1)从AnimalTFDB4转录因子数据库中,根据需要…...
【C++11】可变模板参数详解
个人主页:chian-ocean 文章专栏 C 可变模板参数详解 1. 引言 C模板是现代C编程中一个非常强大且灵活的工具。在C11标准中,引入了可变模板参数(variadic templates),它为模板编程带来了革命性改变。它的出现允许我们…...
Golang笔记1-变量与类型
Go 变量与类型 1. 怎么声明变量 // var 写法:可以在函数外用(全局) var name string "张三" var age int 25 var isAdmin bool // 不赋值就是零值// : 短声明:只能在函数内用(日常首选) name :…...
【VBA】【EXCEL】分类汇总
option explicit option base 1Sub 分类汇总()Dim ws0 As Worksheet, ws1 As WorksheetDim arr0 As Variant, arr1 As VariantDim lastRow As Long, i As Long, m As Long, cnt As LongDim acct As String, opp As String, key As String, pts() As StringDim amt As Double, t…...
2025届最火的六大降AI率工具横评
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 在人工智能辅助写作的进程当中,所生成的内容常常呈现出机械性、重复性以及冗余修…...
XHS-Downloader:解决小红书内容采集痛点的开源工具创新方案
XHS-Downloader:解决小红书内容采集痛点的开源工具创新方案 【免费下载链接】XHS-Downloader 小红书(XiaoHongShu、RedNote)链接提取/作品采集工具:提取账号发布、收藏、点赞、专辑作品链接;提取搜索结果作品、用户链接…...
IAR开发环境配置:解决Fatal Error[Pe1696]头文件缺失问题
1. 初识Fatal Error[Pe1696]:头文件去哪了? 第一次用IAR开发环境的朋友,十有八九会遇到这个让人抓狂的错误提示:"Fatal Error[Pe1696]: cannot open source file core_cm0plus.h"。这就像你照着菜谱做菜,明明…...
技术赋能旧设备:OpenCore Legacy Patcher让Mac重获新生
技术赋能旧设备:OpenCore Legacy Patcher让Mac重获新生 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 当您的Mac设备被苹果官方系统升级列表排除…...
AI辅助开发:让快马AI成为你的编程搭档,迭代优化openclaw风格代码
今天想和大家分享一个开发小技巧:如何用AI辅助工具快速迭代优化代码。最近我在做一个数据抓取的小项目,需要实现类似openclaw的功能,正好用InsCode(快马)平台的AI功能试了试,效果出乎意料的好。 基础功能实现 最开始我只需要一个简…...
腰间盘突出不是休息就好?这些严重后果千万别不当回事!
很多人都有过腰痛的经历,多数人觉得只是 “累到了”,贴个膏药、休息两天就好,却不知道反复的腰痛、腿麻,很可能是腰间盘突出发出的预警,若一味拖延硬扛,只会让病情持续加重,错过最佳干预时机。腰…...
手把手复现金蝶云星空V8.1文件上传漏洞(附POC与修复建议)
金蝶云星空V8.1文件上传漏洞深度解析与实战指南 在企业数字化转型浪潮中,云ERP系统的安全性日益成为关注焦点。近期曝光的金蝶云星空V8.1版本文件上传漏洞,因其无需认证即可利用的特性,被业界评为高危风险。本文将带您从技术原理到实战复现&…...
Unity游戏实时翻译插件XUnity.AutoTranslator的完整技术解析与实战指南
Unity游戏实时翻译插件XUnity.AutoTranslator的完整技术解析与实战指南 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator XUnity.AutoTranslator是一个功能强大的Unity游戏自动翻译框架,为全球玩…...
