有没有办法根据 Apps 主题更改启动画面颜色?

Is there a way to change the splash screen color based on the Apps theme?

能否以编程方式更改本机 android 初始屏幕颜色,以便将其设置为适合为 Flutter 应用选择的主题?

有点像当系统主题设置为深色时,WhatsApp 初始屏幕如何在深色主题中加载。

深色和浅色 WhatsApp 启动画面:

我想这使用了两个主题作为初始屏幕,它们链接到系统主题,但我不太了解如何以及是否可能。

所以问题是:是否可以在 运行 flutter 应用程序时更改启动画面的 color/theme,以便在应用程序下次启动时本机 android 启动画面加载与 Flutter 应用程序相同的主题?

(对不起,如果我重复了很多,但我想尽可能详细地描述我的问题)

您可以使用某种 SharedPreferences 来保存主题的当前状态。然后return根据你Shared Preferences中保存的值将想要的主题MaterialApp。我个人使用 HydratedBloc 包来保存我的应用程序的当前状态,包括主题。

如果您从 Android 文件夹 xml 文件中设置启动画面,那么我想您无法避免编写一些本机代码并将一些主题逻辑放在 Android 子文件夹。另一方面,如果主题逻辑和闪屏都在 main.dart 文件中。然后你可以只存储你想要使用的两个不同的 splashscreens 并添加一些 if-else 语句来显示启动画面并保存用户主题偏爱。如果您不知道如何执行此操作,可以关注此线程:

在您项目文件夹的 android/app/src/main/res 中应该有一个 drawable 文件夹,其中包含用于浅色主题的 launch_background.xml。复制此文件夹并调用第二个 drawable-night 并配置深色主题样式。它会根据 Android 的系统主题自动更改。

drawable(浅色主题)文件夹中的launch_background.xml可以这样构造,以显示白色背景的图像:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@android:color/white" />
    <item>
        <bitmap
            android:gravity="center"
            android:src="@drawable/launch_image" />
    </item>
</layer-list>

同样可以在 drawable-night(深色主题)文件夹中的 launch_background.xml 中完成,将 "@android:color/white" 替换为 "@android:color/black" 以获得黑色背景。

请注意,图像必须位于分别使用的 drawabledrawable-night 文件夹中。据我所知,格式必须是png。

我发现 this useful article 解决并解释了本机闪屏主题。