如何在Flutter启动屏添加SVG图片?flutter_native_splash替代方案
Flutter启动屏加载SVG图片可行方案
flutter_native_splash 包的核心逻辑是自动生成各平台原生可识别的位图启动资源,确实不支持直接传入SVG格式,要实现启动页展示SVG可以选下面两种成熟方案:
方案1:原生层矢量图配置(体验最优,无过渡闪屏)
这个方案完全沿用系统原生启动页的加载逻辑,不存在Flutter初始化阶段的白屏问题,矢量图也能在所有分辨率设备上保持清晰:
- Android端适配:
- 把SVG文件通过Android Studio自带的Vector Asset工具转换成VectorDrawable格式的XML资源,存到
android/app/src/main/res/drawable目录下 - 修改启动页布局文件,将原本加载位图的ImageView替换为加载上述VectorDrawable资源的控件;如果需要兼容Android 5.0以下版本,在app模块的build.gradle中添加配置
vectorDrawables.useSupportLibrary = true,同时把布局里的图片控件替换为AppCompatImageView即可
- 把SVG文件通过Android Studio自带的Vector Asset工具转换成VectorDrawable格式的XML资源,存到
- iOS端适配:
- 把SVG转换为Xcode识别的单倍尺度PDF矢量资源(用Figma、本地矢量编辑工具都能完成转换,不要转成位图PDF)
- 打开Xcode将PDF资源导入到Assets.xcassets的启动图资源集,在LaunchScreen.storyboard中把图片视图的关联资源指向这个PDF文件即可
方案2:Flutter侧自定义首帧过渡页(改造成本最低)
如果不想分别改双端原生配置,可以用「纯色原生启动屏+Flutter首帧展示SVG」的过渡方案:
- 用
flutter_native_splash配置和SVG背景色完全一致的纯色启动屏,不要传入任何位图资源,避免原生层加载资源报错 - 项目中引入
flutter_svg依赖,用于在Flutter环境下渲染SVG - 将应用根节点的home属性设置为自定义的过渡启动组件,组件内全屏展示目标SVG,同时在初始化生命周期里执行必要的启动前置逻辑(比如SDK初始化、配置拉取、资源预加载)
- 所有前置逻辑执行完成后,通过路由替换直接跳转至应用主页面
- 注意:这个方案会在原生启动屏消失、Flutter完成第一帧渲染后才显示SVG,如果Flutter初始化耗时较长会出现短暂的纯色停留,建议把非必要的启动逻辑延后到主页面加载完成后再执行,缩短过渡时长。
避坑提示
- 不建议直接修改
flutter_native_splash的源码强行支持SVG,后续包版本升级会直接覆盖你的修改,维护成本很高 - 如果用方案2,记得在
main()函数最开头调用WidgetsFlutterBinding.ensureInitialized(),保证框架绑定初始化完成后再执行后续逻辑,避免第一帧渲染异常
内容的提问来源于stack exchange,提问作者Beyza Mersinli
相关产品推荐
相关产品推荐

