Flutter 3.27.0 在 2024/12/12 发布,我的应用从 Flutter 3.22.0 升级到 Flutter 3.27.4版本。
Flutter 3.27.4 在 2025/2/6 发布 ,整个大的改动,还是在 3.27.0版本之初。
Flutter 3.27.0 之后,默认情况下,Android 会针对所有以 Android 15 或更高版本为目标平台的应用强制使用无边框模式。
在 Flutter 3.27 之前,如果开发者的Flutter 应用默认以 Android 14 为目标,并且不会自动选择进入无边框模式,从 Flutter 版本 3.27 开始它将以 Android 15 为目标,并自动为您的应用选择无边框模式。
在 Flutter 3.27 之后, Flutter 应用在 Android 上默认使用SystemUiMode.edgeToEdge,并且设置任何其他SystemUiMode都将不起作用。
要在 SDK 15 上退出无边框设计,需要该设计的每个 Activity 中指定新的样式属性。
默认情况下,Flutter 应用中使用的样式在 Android 清单文件 ( ) 中设置your_app/android/app/src/main/AndroidManifest.xml。通常,样式由 表示@style,并帮助设置应用的主题。在清单文件中修改这些默认样式:
<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。在那里,向样式添加以下属性:
<?xml version="1.0" encoding="utf-8"?>
<resources>
...
<style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
...
<!-- 添加下面这一行: -->
<item name="android:windowOptOutEdgeToEdgeEnforcement">true</item>
</style>
</resources>
如果你的应用 minsdk <35 , 则需要定义在 values-v35 目录下
或者 在values 中的styles.xml中 使用 targetApi 来限定:
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
<style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
<item name="android:windowBackground">?android:colorBackground</item>
<item name="android:windowOptOutEdgeToEdgeEnforcement" tools:targetApi="35">true</item>
</style>
</resources>
或者
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
<style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
<item name="android:windowBackground">?android:colorBackground</item>
<item name="android:windowOptOutEdgeToEdgeEnforcement" tools:ignore="NewApi">true</item>
</style>
</resources>