Flutter启动页黑屏的解决方案

在编写Flutter应用的时候这个问题困扰了我几天的时间。到网上去搜索答案,千篇一律的都是在AndroidManifest添加meta-data

<meta-data
                android:name="io.flutter.app.android.SplashScreenUntilFirstFrame"
                android:value="true"/>

添加的位置如下

<activity
            android:name=".flutter.FlutterActivity"
            android:hardwareAccelerated="true"
            android:screenOrientation="portrait"
            android:theme="@style/FlutterTheme">
            <meta-data
                android:name="io.flutter.app.android.SplashScreenUntilFirstFrame"
                android:value="true"/>
        activity>

上面这段代码是我见到过最多的解决方案,可是我用各种姿势尝试过,都解决不了问题,启动的时候依然会闪一下黑屏。当时只能想了一个折中的方案,黑屏就黑屏吧,把splash也换成黑色的,这样也不至于启动的时候白屏之后再黑屏一下再显示应用程序的主界面。此时我在想是不是Flutter SDK的问题,尝试换SDK也没有解决问题,但是网上的许多Demo应用确实没有启动黑屏的问题,为什么偏偏就我的有呢?
后来我尝试copy别人的Demo源码自己编译,发现有的编译不过(里面有些东西新版本已经不支持了),有的能编译通过,但是启动的splash时间有明显的区别。此时我就猜测是不是Flutter版本的问题。于是我在网络上搜索了一下Flutter版本升级后的变化(我用的是最新的1.12版本),果不其然!
以上的代码是针对老版本的Flutter有效,对新版本的Flutter已经不再有效,新版的Flutter已经不支持上述代码,下面说说我关注的启动页黑屏的问题要怎么解决。

删除所有键为 android:name=“io.flutter.app.android.SplashScreenUntilFirstFrame” 的 标签。
在 styles.xml 中添加一个启动主题,将所需的启动屏幕配置为背景`Drawable’:

<style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
    "android:windowBackground">@drawable/[your_launch_drawable_here]
style>

以上是针对需要splash页面的设置,当然,不需要的话则不设置,默认splash是白屏。
以下是AndroidManifest的设置

<activity android:name="io.flutter.embedding.android.FlutterActivity"
  android:theme="@style/LaunchTheme"
  >
  
  
  
  <meta-data
    android:name="io.flutter.embedding.android.SplashScreenDrawable"
    android:resource="@drawable/launch_background" />
  
  <meta-data
    android:name="io.flutter.embedding.android.NormalTheme"
    android:resource="@style/NormalTheme"
    />
  
activity>

从中可以看到,只解决启动黑屏问题的话,只需要添加一个标签,注意和老版本标签的区别

 <meta-data
    android:name="io.flutter.embedding.android.SplashScreenDrawable"
    android:resource="@drawable/launch_background" />

你可能感兴趣的:(Flutter)