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),它为模板编程带来了革命性改变。它的出现允许我们…...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...
[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...
MinIO Docker 部署:仅开放一个端口
MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...
Rust 开发环境搭建
环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行: rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu 2、Hello World fn main() { println…...
渗透实战PortSwigger靶场:lab13存储型DOM XSS详解
进来是需要留言的,先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码,输入的<>当成字符串处理回显到页面中,看来只是把用户输…...
Vue3中的computer和watch
computed的写法 在页面中 <div>{{ calcNumber }}</div>script中 写法1 常用 import { computed, ref } from vue; let price ref(100);const priceAdd () > { //函数方法 price 1price.value ; }//计算属性 let calcNumber computed(() > {return ${p…...
goreplay
1.github地址 https://github.com/buger/goreplay 2.简单介绍 GoReplay 是一个开源的网络监控工具,可以记录用户的实时流量并将其用于镜像、负载测试、监控和详细分析。 3.出现背景 随着应用程序的增长,测试它所需的工作量也会呈指数级增长。GoRepl…...
2.2.2 ASPICE的需求分析
ASPICE的需求分析是汽车软件开发过程中至关重要的一环,它涉及到对需求进行详细分析、验证和确认,以确保软件产品能够满足客户和用户的需求。在ASPICE中,需求分析的关键步骤包括: 需求细化:将从需求收集阶段获得的高层需…...
