¿Tu app Flutter muestra advertencias en Google Play por edge-to-edge y APIs obsoletas en Android 15 (SDK 35)? Aprende paso a paso cómo actualizarla y usar enableEdgeToEdge con código listo para copiar.
De forma predeterminada, Android aplica el modo de extremo a extremo (edge-to-edge) en todas las aplicaciones que apunten a Android 15 o posterior. Para obtener más información sobre este cambio, consulta las notas de la versión de Android 15. Esto afecta a los dispositivos que ejecutan Android SDK 15+ o API 35+.
Recordemos que desde Android 15, las apps que apunten al SDK 35 activan automáticamente el modo de extremo a extremo (edge-to-edge). Esto significa que la UI puede invadir áreas como la barra de estado y la barra de navegación.
Primero que nada vamos a seguir un poco la documentación oficial que proporciona Flutter para la migración a edge-to-edge (extremo a extremo)
AndroidManifest.xml
Buscamos el siguiente archivo en la ruta: android/app/src/main/AndroidManifest.xml
Aquí hacemos la siguiente modificaciones:
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application ...>
<activity ...>
<meta-data
android:name="io.flutter.embedding.android.NormalTheme"
android:resource="@style/NormalTheme"
/>
</activity>
</application>
</manifest>Por qué hacer esta modificación:
Esto asegura que tu app use el tema (NormalTheme) donde vas a configurar el comportamiento de edge-to-edge.
Sin esto, aunque cambies styles.xml, la app seguiría tomando otro tema y tus cambios no aplicarían
styles.xml
Buscamos el siguiente archivo en la ruta: android/app/src/main/res/values/styles.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
...
<item name="android:windowOptOutEdgeToEdgeEnforcement">true</item>
</style>
...
<style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
...
<item name="android:windowOptOutEdgeToEdgeEnforcement">true</item>
</style>
</resources>
Hacer los siguientes cambios en este archivo, no es obligatorio.
Por qué:
Esto es un parche temporal para que Android 15 no te obligue todavía a usar edge-to-edge en todas las pantallas. Solo te da tiempo de adaptar tu UI.
Pero Google recomienda eventualmente quitarlo, porque es solo una forma de “aplazar” el problema.
En resumen:
Si lo pones → evitas que tu app se rompa ahora mismo.
Si lo quitas en el futuro → tu app ya debe estar 100% adaptada a edge-to-edge.
MainActivity.kt
import android.os.Bundle
import io.flutter.embedding.android.FlutterActivity
import androidx.activity.SystemBarStyle
import androidx.activity.enableEdgeToEdge
class MainActivity: FlutterActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge(
statusBarStyle = SystemBarStyle.auto(
android.graphics.Color.TRANSPARENT,
android.graphics.Color.TRANSPARENT
),
navigationBarStyle = SystemBarStyle.auto(
android.graphics.Color.TRANSPARENT,
android.graphics.Color.TRANSPARENT
)
)
}
}
Por qué hacer estos cambios:
Esta es la nueva API oficial que reemplaza a las llamadas obsoletas (setStatusBarColor, setNavigationBarColor).
- Permite que tu app se vea bien en Android 15.
- Da retrocompatibilidad con versiones anteriores.
- Evita las advertencias de Google Play Console.
Y no olvides: eliminar cualquier window.setStatusBarColor(...) o window.setNavigationBarColor(...).
Evitar APIs obsoletas en Flutter:
Se están usando (directa o indirectamente por Flutter) métodos que quedaron obsoletos en Android 15:
- setStatusBarColor
- setNavigationBarDividerColor
- setNavigationBarColor
Ya no se deberían llamar a estas APIs. En su lugar, controlamos los colores de la status bar y la navigation bar mediante edge-to-edge o, en Flutter, con el paquete: flutter_statusbarcolor_ns
pubspec.yaml:
dependencies:
flutter:
sdk: flutter
flutter_statusbarcolor_ns: ^0.6.0
Además, debemos actualizar absolutamente todas y cada una de las librerías que se están usando. Es recomendable revisar en la página oficial de Flutter de las librerías y verificar cuando se realizó la última actualización para saber si se ha solucionado estas advertencias en esas librerías.
main.dart
Dentro de nuestro main.dart debemos tener lo siguiente:
import 'package:flutter/services.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
SystemChrome.setSystemUIOverlayStyle(
const SystemUiOverlayStyle(
statusBarColor: Colors.transparent, // transparente
systemNavigationBarColor: Colors.transparent, // transparente
systemNavigationBarDividerColor: null, // evita usar obsoleto
),
);
runApp(MyApp());
}
En Flutter ya no debes usar librerías o métodos que internamente llamen a esas APIs antiguas.
Con SystemChrome.setSystemUIOverlayStyle controlas colores y brillo de íconos de manera moderna y soportada en Android 15.
Posibles errores y sus soluciones
Dependencia de AndroidX Activity
La función enableEdgeToEdge() está en la librería androidx.activity:activity-ktx, pero muchos proyectos Flutter no la tienen actualizada.
En tu archivo android/app/build.gradle revisa que tengas esto en dependencies:
dependencies {
...
implementation "androidx.activity:activity-ktx:1.9.3"
}
Si no está, agrégalo. Luego limpia el proyecto y vuelve a compilar:
flutter clean
flutter pub get
Falta de import de Color en MainActivity
Si en tu código usas:
android.graphics.Color.TRANSPARENT
Eso funciona, pero a veces da error si no tienes el import. Para estar seguro agrega arriba:
import android.graphics.Color
Y cambia tu código a:
statusBarStyle = SystemBarStyle.auto(
Color.TRANSPARENT,
Color.TRANSPARENT
),
navigationBarStyle = SystemBarStyle.auto(
Color.TRANSPARENT,
Color.TRANSPARENT
)
Colisión con código viejo en MainActivity
Si aún tienes líneas como:
window.setStatusBarColor(...)
window.setNavigationBarColor(...)
Deben eliminarse, porque chocan con enableEdgeToEdge().
Conflicto con estilos
Si dejaste en styles.xml la línea:
<item name="android:windowOptOutEdgeToEdgeEnforcement">true</item>
Eso puede chocar con enableEdgeToEdge().
- Si ya usas enableEdgeToEdge(), lo recomendable es quitar esa línea.
Error en MainActivity ComponentActivity - enableEdgeToEdge
error: MainActivity.kt: Unresolved reference. None of the following candidates is
applicable because of a receiver type mismatch:
fun ComponentActivity.enableEdgeToEdge(
statusBarStyle: SystemBarStyle = …
)
Este error está diciendo que enableEdgeToEdge no reconoce tu MainActivity como un ComponentActivity, porque FlutterActivity no hereda de ComponentActivity directamente, sino que tiene su propio ciclo de vida. Por eso el compilador no encuentra la extensión enableEdgeToEdge.
En vez de usar enableEdgeToEdge, usa directamente la API de Flutter que sí es compatible con FlutterActivity.
En tu MainActivity.kt, deja solo estas líneas:
// Tus importaciones…
import io.flutter.embedding.android.FlutterActivity
class MainActivity: FlutterActivity() {
// No necesitas onCreate si lo vas a manejar desde Flutter (SystemChrome)
}
Eliminamos esto porque SystemBarStyle y enableEdgeToEdge no funcionan con FlutterActivity y el onCreate porque Flutter ya gestiona el ciclo de vida.
En nuestro main.dart solo dejamos las siguientes líneas:
import "package:flutter/material.dart";
import "package:flutter/services.dart";
void main() {
WidgetsFlutterBinding.ensureInitialized();
// Activa edge-to-edge en Flutter
SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge);
// Define estos estilos
SystemChrome.setSystemUIOverlayStyle(
const SystemUiOverlayStyle(
statusBarColor: Colors.transparent,
systemNavigationBarColor: Colors.transparent,
statusBarIconBrightness: Brightness.light,
systemNavigationBarIconBrightness: Brightness.light,
),
);
runApp(const MyApp());
}
Con esto ya no necesitas enableEdgeToEdge en Kotlin.
Así evitas el error de Unresolved reference y tu app arrancará sin problemas.
Conclusión
Actualizar tu aplicación Flutter para Android 15 (SDK 35) y el nuevo modo edge-to-edge es fundamental para evitar errores en Google Play Console relacionados con APIs obsoletas como setStatusBarColor, setNavigationBarColor o setNavigationBarDividerColor. Con simples ajustes en el Manifest, en styles.xml, el uso de enableEdgeToEdge en MainActivity y la configuración de SystemChrome en Flutter, tu app quedará 100% compatible con Android 15, preparada para el futuro y con una experiencia de usuario optimizada.
Si tu aplicación Flutter muestra advertencias por edge-to-edge o APIs obsoletas en Android 15, sigue estos pasos ahora y garantiza el éxito de tu proyecto en Google Play.