Flutter 开屏方案
前言
在APP
项目中闪屏页(或启动页)的作用是为了解决在程序显示第一帧之前,不要出现白屏的现象,尤其是在纯RN
和Flutter
的项目里面,资源加载完成到显示的速度会比Native
要逊色一些。这里主要总结纯Flutter
项目可选择的闪屏页实现方案,大部分为 pub.dev 上比较受欢迎的几种。
Native 处理
这里就不多说了,Native
处理闪屏页不管是Android
还是iOS
官方都有很成熟的解决方案。
flutter_splash_screen 插件
flutter_splash_screen 0.1.0 这个名字叫的很大气,然而实际却不太硬。不知道为何受欢迎程度还挺高,难道是因为上架时间早?
目前来看这个插件没人维护,API
不完善,issue
没人解决。这里提到这个插件主要想让同样在选闪屏页方案小伙伴就别再趟坑了,绕路节省时间。
flutter_native_splash
flutter_native_splash 0.1.9 这个package
可以自动生Android
和iOS
端闪屏页的代码。并且可以自定义image
和背景color
。
集成比较简单:
- 添加依赖
dev_dependencies:flutter_native_splash: ^0.1.9
复制代码
别忘记执行
flutter pub get
复制代码
- 将设置添加到项目的
pubspec.yaml
中
flutter_native_splash:image: images/splash.png // 对应生成iOS中LaunchImage图片,包含1x2x3xcolor: "#ffffff" // 闪屏页背景色
复制代码
还有一些针对平台的属性可供选用:
flutter_native_splash:android: false // 可以选择是否支持android或者iOSandroid_disable_fullscreen: true // 禁用android全屏启动fill: true // 如果图像可用在所有的屏幕上添加为true,目前只支持android
复制代码
- 生成上面添加的资源到
Native
flutter pub pub run flutter_native_splash:create
复制代码
可以看到对应生成的资源文件
bogon:flutterdemo yin$ flutter pub pub run flutter_native_splash:create
[Android] Creating splash images
[Android] Updating launch_background.xml with splash image path
[Android] Updating colors.xml with color for splash screen background
[Android] Updating styles.xml with full screen mode setting
[iOS] Creating splash images
[iOS] Updating LaunchScreen.storyboard with width, height and color
bogon:flutterdemo yin$
iOS
端在Xcode
工程中选中LaunchScreen.storyboard
,关联UIImageView
和刚刚生成的图片,如果有需要调整UIImageView
的布局。
到这里使用 flutter_native_splash 0.1.9 方式制作闪屏页就完成了,实际上从技术层面讲这种方案还是Native
的闪屏页方案,只不过做成了工具提高了效率。最终run
起来也确实是我们想要的效果。
flare_splash_screen
flare_splash_screen 3.0.1 这个package
让闪屏页具有Flare
动画的功能。
- 添加依赖并执行
flutter pub get
dependencies:flare_splash_screen: ^3.0.1
复制代码
pubspec.yaml
中添加制作好的.flr
,我这里使用demo
自带的,公司项目中使用肯定是找设计师要。
assets:- intro.flr
复制代码
- conding
import 'package:flare_splash_screen/flare_splash_screen.dart';
复制代码
SplashScreen.navigate
方式
class MyApp extends StatelessWidget {// This widget is the root of your application.@overrideWidget build(BuildContext context) {return MaterialApp(title: 'Flutter Demo',theme: ThemeData(primarySwatch: Colors.blue,),home: SplashScreen.navigate(name: 'intro.flr',next: (context) => BottomNavigationWidget(),until: () => Future.delayed(Duration(seconds: 5)),startAnimation: '1',),);}
}
复制代码
SplashScreen.callback
方式
class MyApp extends StatelessWidget {// This widget is the root of your application.@overrideWidget build(BuildContext context) {return MaterialApp(title: 'Flutter Demo',theme: ThemeData(primarySwatch: Colors.blue,),home: Builder(builder: (context) => SplashScreen.callback(name: 'intro.flr',onSuccess: (_) {Navigator.of(context).pushReplacement(PageRouteBuilder(pageBuilder: (_, __, ___) =>BottomNavigationWidget()));},loopAnimation: '1',until: () => Future.delayed(Duration(seconds: 1)),endAnimation: '1',onError: (error, stacktrace) {print(error);},),),);}
}
复制代码
这个package
的API
写的很灵活也很详细,选择你需要的属性做对应的调试即可,这里不做过多解释,直接看文档就好。
这种方案虽然很炫酷,但是并不能完美解决白屏的问题,从程序启动到动画加载之前还是会有白屏的现象。
总结
目前来看优雅的闪屏页还是离不开Native
的支持
团队有Native
开发者闪屏页推荐选择方案为Native
处理。
团队没有Native
开发者可以选择flutter_native_splash
方案。
追求炫酷的可以尝试flare_splash_screen
。
Flutter 开屏方案相关推荐
- Thresh — 基于JS的Flutter动态化方案
Thresh - 基于JS的Flutter动态化方案 github上最新开源的项目,含金量很高哦
- 深度|10分钟读懂阿里巴巴高级专家在Flutter Live2018的分享
作者:闲鱼技术-宗心 12月4日,google flutter团队宣布第一个flutter正式版本发布.次日,Flutter Live Beijing 会议上,google flutter团队邀请了在 ...
- Flutter开发之《头条 Flutter iOS 混合工程实践》笔记(54)
摘自:头条 Flutter iOS 混合工程实践 从 App Store 下载或更新头条(6.9.2 或以上版本),找到 懂车帝 -> 热门车型,点击打开后即可体验 Flutter 的页面效果. ...
- 【错误记录】Flutter 插件不兼容 ( requires Flutter SDK version >=1.22.0 <2.0.0, url_launcher >=5.7.7 <6.0.0- )
文章目录 一. 报错信息 二. 解决方案 一. 报错信息 Flutter 下载 https://pub.dev/packages/url_launcher 插件 , 配置完配置文件 ; depende ...
- flutter 图片转base64_京东技术中台的Flutter实践之路
作者 | 京东 ARES 跨端团队 编辑 | Yonie 在 2019 年,Flutter 推出了多个正式版本,支持的终端越来越多,使用的项目也越来越多.Flutter 正在经历从小范围尝鲜到大面积应 ...
- 深入分析 Flutter 初始化流程
在调研 Flutter 动态化方案的时候,需要了解 Flutter 加载 dart 产物的流程,阅读了一部分源码,顺便也读了初始化相关的代码.于是梳理了一遍 Flutter 的初始化流程 flutte ...
- 如何用 Flutter 实现混合开发?闲鱼公开源代码实例
2019独角兽企业重金招聘Python工程师标准>>> 具有一定规模的 App 通常有一套成熟通用的基础库,尤其是阿里系 App,一般需要依赖很多体系内的基础库.那么使用 Flutt ...
- flutter 国际化_从0开始设计Flutter独立APP | 第二篇: 完整的国际化语言支持
鉴于Flutter高性能渲染和跨平台的优势,闪点清单在移动端APP上,使用了完整的Flutter框架来开发.既然是完整APP,架构搭建完全不受历史Native APP的影响,没有历史包袱的沉淀,设计也 ...
- GMTC2019|闲鱼-基于Flutter的架构演进与创新
2012年应届毕业加入阿里巴巴,主导了闲鱼基于Flutter的新混合架构,同时推进了Flutter在闲鱼各业务线的落地.未来将持续关注终端技术的演变及趋势 Flutter的优势与挑战 Flutter是 ...
最新文章
- 统计学习导论:基于R应用——第二章习题
- 产品经理必知必会知识-竞品分析需求实战报告
- 成功解决ImportError: Could not find ‘cudart64_90.dll‘. TensorFlow requires that this DLL be installed in
- Building Shops dp 预处理距离
- centos 7 备份代码,然后回滚
- 利用python爬虫(part7)--初识Xpath之Node节点
- Objective-C代码学习大纲
- qq浏览器网页翻译_如何通过Edge浏览器调用“谷歌翻译”,将整个网页翻译为中文...
- 正确理解 AsyncTask,Looper,Handler三者之间的关系(基于android 4.0)
- 大数据导论章节答案_智慧树APP大数据导论第三单元章节测试答案
- ExpandableListView
- mac linux 引导分区,Paragon ExtFS For Mac v10.0.829 | Linux分区数据读写驱动 _ 黑苹果乐园...
- 论文写作课程心得体会
- epub电子书格式转换(E-book Conversion翻译) -- calibre
- NOTE_网络存储-3 by 张冬
- 计算机关机键桌面,电脑关机快捷键是什么?
- 任正非:华为不会让CFO接班 干部选拔以李云龙为标杆
- Linux 基础知识总结
- 随机生成11位的电话号码
- 大文件中返回频数最高的100个词
热门文章
- java wildcard_java泛型 wildcard
- CentOS7和CentOS8 FreeSWITCH 1.10.7 简单图形化界面1--安装脚本
- Spark简介、生态系统
- 怎么在python提取别的数据了_别再问如何用python提取PDF内容了!
- 无线网感叹号不能上网怎么办
- FOFA网络空间搜索引擎使用教程
- 用excel做数据分析必知的编程语言
- 蚂蚁金服副总裁蒋国飞:技术全面开放,与合作伙伴共发展
- 古希腊数学家把数1,3,6,10,15,21,...叫做三角形数,它有一定的规律性。若把第一个三角形数记为a1,第二个三角形数记为a2,...,第n个三角形数记为an,计算a1+a2,a2+a3
- 单反相机的传奇—佳能单反50年辉煌之路(连载十四)