在 Flutter 2.5 之前,Flutter 应用可以通过在其应用清单文件 (`AndroidManifest.xml`) 的元数据中定义启动画面,或者通过在其 FlutterActivity 中实现 provideSplashScreen,或者两者结合的方式来添加启动画面。启动画面会在 Android 启动屏幕显示之后和 Flutter 绘制第一帧之前短暂显示。此方法自 Flutter 2.5 起已弃用。Flutter 现在会自动保持 Android 启动屏幕显示,直到绘制第一帧。

要从定义自定义启动画面迁移到仅定义应用程序的自定义启动屏幕,请按照应用程序在 2.5 版本发布之前自定义启动画面定义方式所对应的步骤进行操作。

FlutterActivity 中定义的自定义启动画面

  1. 在您应用程序的 FlutterActivity 中找到 provideSplashScreen() 的实现并删除它。该实现应涉及将您应用程序的自定义启动画面构建为一个 Drawable。例如

    java
    @Override
    public SplashScreen provideSplashScreen() {
        // ...
        return new DrawableSplashScreen(
            new SomeDrawable(
                ContextCompat.getDrawable(this, R.some_splash_screen)));
    }
  2. 使用紧随其后的部分中的步骤,以确保您的 Drawable 启动画面(上例中的 R.some_splash_screen)被正确配置为应用程序的自定义启动屏幕。

在 Manifest 中定义的自定义启动画面

  1. 找到您应用程序的 AndroidManifest.xml 文件。在此文件中,找到 activity 元素。在此元素中,找到 android:theme 属性和将启动画面定义为 io.flutter.embedding.android.SplashScreenDrawablemeta-data 元素,并更新它。例如

    xml
    <activity
        // ...
        android:theme="@style/SomeTheme">
      // ...
      <meta-data
          android:name="io.flutter.embedding.android.SplashScreenDrawable"
          android:resource="@drawable/some_splash_screen"
          />
    </activity>
  2. 如果未指定 android:theme 属性,请添加该属性并为您的应用程序启动屏幕定义一个启动主题

  3. 删除 meta-data 元素,因为 Flutter 不再使用它,但它可能会导致崩溃。

  4. 在您应用程序的 style 资源中找到 android:theme 属性指定的主题定义。此主题指定您应用程序的启动主题。确保 style 属性使用您的自定义启动画面配置 android:windowBackground 属性。例如

    xml
    <resources>
        <style
            name="SomeTheme"
            // ...
            >
            <!-- Show a splash screen on the activity. Automatically removed when
                 Flutter draws its first frame -->
            <item name="android:windowBackground">@drawable/some_splash_screen</item>
        </style>
    </resources>