从细节入手改善用户体验,Flutter跨平台App开发中设置Android和iOS的启动页
前言 flutter开发App方便快捷,就是冷启动的时候要加载dart引擎有短暂的白屏,严重影响用户体验,这个时候我们就需要设置一个启动图片,像国内大部分App那样(例如微信那个地球),启动App的时候显示这个图片,加载完再进入App,不至于影响用户体验。 Android启动页 首先要准备好启动图,本文命名为splash.png,按照不同的分辨率添加到对应的mipmap-hdpi / mipmap
目录5 个章节

前言
flutter开发App方便快捷,就是冷启动的时候要加载dart引擎有短暂的白屏,严重影响用户体验,这个时候我们就需要设置一个启动图片,像国内大部分App那样(例如微信那个地球),启动App的时候显示这个图片,加载完再进入App,不至于影响用户体验。
Android启动页
首先要准备好启动图,本文命名为splash.png,按照不同的分辨率添加到对应的mipmap-hdpi / mipmap-mdpi / mipmap-xhdpi / mipmap-xxhdpi / mipmap-xxxhdpi目录里面。
然后编辑/android/app/src/main/res/drawable/launch_background.xml文件,默认的应该是这样的:
<?xml version="1.0" encoding="utf-8"?>
<!-- Modify this file to customize your launch splash screen -->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@android:color/white"/>
</layer-list>
可以看到原本就是白色背景,难怪启动会短暂白屏,现在我们把白色背景这行代码注释掉,改成以下代码:
<?xml version="1.0" encoding="utf-8"?>
<!-- Modify this file to customize your launch splash screen -->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- <item android:drawable="@android:color/white"/>-->
<!-- You can insert your own image assets here -->
<item>
<bitmap
android:gravity="fill"
android:mipMap="true"
android:src="@mipmap/splash"/>
</item>
</layer-list>
这样Android App启动的时候就会显示这个图片了,舒服。
iOS配置
(注:由于我没有Mac电脑,因此无法测试iOS运行效果,配置方法来自参考资料)
首先用xcode打开ios目录,把图片拖进界面左侧的Runner根目录,勾选Copy items if needed,选中Create groups并在下方勾选Runner。

完成后在左侧 Project navigator 打开文件 Runner/Runner/LaunchScreen.storyboard。然后在中间部分点开 view tree,找到 LaunchImage。

点击后查看右侧 Attributes inspector,在 image 一栏中填写 splash.png,并将 Content Mode 修改为 Scale To Fill。

选中图片,然后在左侧 View Controller scence 中选中并剪切该图片 splash.png 并粘贴,以清除十字线(约束)。
编辑图片的约束,使其充满全屏幕。
点击屏幕右下角的约束编辑器:

将上面填空处都填 0,然后点击 Add 4 Constraints。
就OK啦~
Flutter启动界面
这样设置完我们会发现,虽然启动图有了,但是由于现在的手机性能都很高,一下子就加载完成,所以每次打开都是启动图一闪而过,这样体验也不是很好,所以我们要在Flutter里面再显示一遍这个启动界面,还可以想很多国产流氓App那样,在启动界面加上长达5秒的广告(误)
以下是我的App的启动页Dart代码,可以供大家参考,通过Future.delayed(Duration(seconds: 1))可以实现在这个页面停留1秒,要显示久一点就改多点。
import 'package:flutter/services.dart';
import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
class SplashRoute extends StatefulWidget {
@override
_SplashRouteState createState() => _SplashRouteState();
}
class _SplashRouteState extends State<SplashRoute> {
@override
void initState() {
super.initState();
Future.delayed(Duration(seconds: 1)).then((e) {
Navigator.of(context).pushReplacementNamed('home');
});
}
@override
Widget build(BuildContext context) {
// 隐藏状态栏
SystemChrome.setEnabledSystemUIOverlays([SystemUiOverlay.bottom]);
return Container(
color: Colors.lightBlue,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
FaIcon(FontAwesomeIcons.cat, size: 100, color: Colors.grey[200]),
Text(
'壹喵',
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 30,
color: Colors.grey[200],
decorationStyle: TextDecorationStyle.dotted,
decorationThickness: 0,
),
),
],
),
);
}
}
ok
这样就完成了,虽然只是一个很小的细节,但是却可以极大改善用户体验,特别是晚上,我们开发的App都会适配系统的神色模式,但是启动的这一瞬间一个白屏,如果把用户的眼镜闪瞎了,估计我们的App离被打1星和下架也不远了……
_EOF_
从细节入手改善用户体验,Flutter跨平台App开发中设置Android和iOS的启动页
- 本文作者:
- 程序设计实验室
- 版权声明:
- 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
相关文章
Flutter播放音乐简单解决方案-AudioPlayers-与填坑
目前flutter播放音乐好像只搜到AudioPlayers这个解决方案,我照着他的文档来,确实是可以播放音乐的。 项目主页:https://pub.flutter-io.cn/packages/audioplayers AudioCache介绍:https://github.com/luanpotter/audioplayers/blob/master/doc/audio_cache.md An
2021-12-18 · Flutter · 约 1 分钟
Flutter移动应用快速构建实践——状态管理、国际化、数据持久化、性能优化(二)
继续上一篇:极简诗词开发背后:Flutter移动应用快速构建实践——状态管理、国际化、数据持久化、性能优化(一) 前文中说到了项目结构、状态管理和国际化的方案,本文继续聊聊数据持久化和粗略的性能优化。 数据持久化 目前的话,flutter用的比较多比较成熟的数据持久化就是shared_preferences和SQFLite,一个是ini配置文件,一个是SQLite数据库,小应用我比较倾向只用前者,
2021-12-18 · Flutter · 约 1 分钟
Flutter开发:迁移Flutter应用到AndroidX
首先上官方文档:https://flutter.dev/docs/development/packages-and-plugins/androidx-compatibility 有两种方式,一种由Android studio自动完成,一种手动修改依赖配置。 官方推荐第一种,不过在我这不好使,于是我用了第二种,也成功跑起来了~ 自动方式 Use Android Studio to migrate y
2021-12-18 · Flutter · 约 1 分钟
使用Flutter设计一个好看的_我_页面
近期遇到一些很烦的琐事,状态比较down,很多原本计划好的事情都耽搁了,实在是难顶…… 看到后台一直有朋友问怎么博客和公众号没有更新,所以我忙完得闲就来更了! 前言 起因是最近重拾以前的旧项目(业余做的,打算有机会自己运营起来)继续完善,然后发现有些界面设计太粗糙了,实在不满意~~(虽然是因为本来功能就不多)~~,然后就着手开始优化~ 应该会写成一系列文章,今天就从App的"我"页面开始吧~ 效果
2021-12-18 · Flutter · 约 1 分钟
讨论
共 0 条加载评论中…