第三章、flutter项目启动时有一段时间出现白屏怎么办?

笔者刚开始开发一个demo项目时,发现自己什么也没写还是出现启动时白屏一段时间的情况,这种在原生android和ios项目几乎是不可能出现的。那么到底为什么会出现这种情况呢?

原因:

由于flutter是用底层内核Skia图形引擎进行图形绘制,内核在初始化时需要花费一些时间,因此会出现白屏。

解决方案:

andoroid端:

在AndroidManifest.xml清单文件,配置启动页时配置启动theme:

android:theme="@style/LaunchTheme"

如下面配置:

复制代码
<activity
    android:name=".MainActivity"
    android:exported="true"
    android:launchMode="singleTop"
    android:taskAffinity=""
    android:theme="@style/LaunchTheme"
    android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
    android:hardwareAccelerated="true"
    android:windowSoftInputMode="adjustResize">
    <!-- Specifies an Android theme to apply to this Activity as soon as
         the Android process has started. This theme is visible to the user
         while the Flutter UI initializes. After that, this theme continues
         to determine the Window background behind the Flutter UI. -->
                <meta-data
                  android:name="io.flutter.embedding.android.NormalTheme"
                  android:resource="@style/NormalTheme"
                  />
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
</activity>

在styles.xml文件中新建

复制代码
<style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
    <!-- Show a splash screen on the activity. Automatically removed when
         the Flutter engine draws its first frame -->
    <item name="android:windowBackground">@drawable/launch_background</item>
    <item name="android:windowFullscreen">true</item>
</style>

这里指定windowBackground未launch_background

在drawable和drawable-v21下新增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" />-->
    <item android:drawable="@android:color/white" />
    <!-- You can insert your own image assets here -->
    <item>
        <bitmap
            android:gravity="fill"
            android:src="@mipmap/launch_image" />
    </item>
</layer-list>

新增launch_image.png图片文件,记得图片文件需要适配不同分辨率。

ios端:

ios/Runner/Assets.xcassets/LaunchImage.imageset 中设置启动图片。

另外还有一种方法:

使用 flutter_native_splash 包(最方便)

yaml

复制代码
dev_dependencies:
  flutter_native_splash: ^2.0.0

添加配置文件 flutter_native_splash.yaml

yaml

复制代码
flutter_native_splash:
  color: "#42a5f5"
  image: assets/splash.png
  android: true
  ios: true

运行命令生成启动页:

bash

复制代码
flutter pub get
flutter pub run flutter_native_splash:create

但这种方法,我这边试下来不成功,不知道为什么,如果哪位大拿知道可以告诉我哈!

相关推荐
ujainu5 小时前
Flutter + OpenHarmony 实现经典打砖块游戏开发实战—— 物理反弹、碰撞检测与关卡系统
flutter·游戏·openharmony·arkanoid·breakout
微祎_5 小时前
构建一个 Flutter 点击速度测试器:深入解析实时交互、性能度量与响应式 UI 设计
flutter·ui·交互
王码码20355 小时前
Flutter for OpenHarmony 实战之基础组件:第二十七篇 BottomSheet — 动态底部弹窗与底部栏菜单
android·flutter·harmonyos
ZH15455891316 小时前
Flutter for OpenHarmony Python学习助手实战:Web开发框架应用的实现
python·学习·flutter
晚霞的不甘6 小时前
Flutter for OpenHarmony 构建简洁高效的待办事项应用 实战解析
flutter·ui·前端框架·交互·鸿蒙
百锦再6 小时前
Vue高阶知识:利用 defineModel 特性开发搜索组件组合
前端·vue.js·学习·flutter·typescript·前端框架
廖松洋(Alina)7 小时前
【收尾以及复盘】flutter开发鸿蒙APP之成就徽章页面
flutter·华为·开源·harmonyos·鸿蒙
ZH15455891317 小时前
Flutter for OpenHarmony Python学习助手实战:机器学习算法实现的实现
python·学习·flutter
廖松洋(Alina)7 小时前
【收尾以及复盘】flutter开发鸿蒙APP之打卡日历页面
flutter·华为·开源·harmonyos·鸿蒙
廖松洋(Alina)7 小时前
【收尾以及复盘】flutter开发鸿蒙APP之本月数据统计页面
flutter·华为·开源·harmonyos·鸿蒙