概述

#

如果您的 Flutter 应用面向 Android SDK 版本 15,您的应用将自动以边缘到边缘模式显示,如 SystemUiMode API 页面中所述。为保持非边缘到边缘的应用行为(包括未设置 SystemUiMode 的情况),请遵循迁移指南中的步骤。

背景

#

默认情况下,Android 对所有面向 Android 15 或更高版本的应用强制执行边缘到边缘模式。欲了解此更改的更多信息,请查阅 Android 15 发布说明。这会影响运行 Android SDK 15+ 或 API 35+ 的设备。

在 Flutter 3.27 之前,Flutter 应用默认面向 Android 14,并且不会自动选择进入边缘到边缘模式,但当您选择面向 Android 15 时,您的应用*将*受到影响。如果您的应用面向 `flutter.targetSdkVersion`(默认情况即如此),那么从 Flutter 3.27 版本开始,它将面向 Android 15,自动让您的应用选择进入边缘到边缘模式。

如果您的应用通过调用 SystemChrome.setEnabledSystemUIMode 明确将 `SystemUiMode.edgeToEdge` 设置为在边缘到边缘模式下运行,则您的应用已完成迁移。需要更多时间迁移到边缘到边缘模式的应用,必须使用以下步骤在运行 Android SDK 15 的设备上选择退出。

请注意以下事项

  1. Android 计划此处详述的解决方案是暂时的。
  2. Flutter 计划在年内与 Android(和 iOS)保持一致,默认支持边缘到边缘模式,因此**请务必在操作系统移除选择退出功能之前迁移到边缘到边缘模式**。

迁移指南

#

要在 SDK 15 上选择退出边缘到边缘模式,请在每个需要它的活动中指定新的样式属性。如果您有一个父样式,而子样式需要选择退出,则可以只修改父样式。在以下示例中,请更新由 `flutter create` 生成的样式配置。

默认情况下,Flutter 应用中使用的样式是在 Android 清单文件(your_app/android/app/src/main/AndroidManifest.xml)中设置的。通常,样式由 @style 表示,并帮助为您的应用设置主题。请在您的清单文件中修改这些默认样式:

AndroidManifest.xml
xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <application ...>
        <activity ...>
            <!-- Style to modify: -->
            <meta-data
              android:name="io.flutter.embedding.android.NormalTheme"
              android:resource="@style/NormalTheme"
            />
        </activity>
    </application>
</manifest>

找到此样式在 your_app/android/app/src/main/res/values/styles.xml 中的定义。在那里,将以下属性添加到样式中:

styles.xml
xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    ...
    <style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
        ...
	      <!-- Add the following line: -->
        <item name="android:windowOptOutEdgeToEdgeEnforcement">true</item>
    </style>
</resources>

此修改后的样式让您的应用对于面向 Android SDK 15 的应用选择退出边缘到边缘模式。这样就完成了!

时间线

#

从 Flutter 3.27 开始,Flutter 应用默认面向 Android 15,因此如果您希望使用此版本而不为您的 Flutter 应用手动设置较低的目标 SDK 版本,请遵循前面的迁移步骤,以保持未设置或非边缘到边缘的 SystemUiMode

包含在版本中:3.26.0-0.0.pre
稳定版本:3.27

参考资料

#