Solución:
La característica que describe se maneja mediante el permiso de la aplicación
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
La documentación indica que este permiso
Permite que una aplicación cree ventanas con el tipo WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY, que se muestra encima de todas las demás aplicaciones.
Una explicación un poco vaga, ¿no? Averigüemos qué hace TYPE_APPLICATION_OVERLAY
medio.
Las ventanas de superposición de aplicaciones se muestran encima de todas las ventanas de actividad (tipos entre FIRST_APPLICATION_WINDOW y LAST_APPLICATION_WINDOW) pero debajo de las ventanas críticas del sistema, como la barra de estado o IME.
¿Por qué he mencionado estas dos líneas?
Bueno, para responder a su pregunta, debemos comprender cómo lograrlo en Android simple. Y sabemos cómo funciona. La cuestión es que este método solo funciona para componentes de Android con interfaz de usuario: actividades, servicios, cuadros de diálogo (los dos últimos requerirán un trabajo adicional).
¿Qué significa esto en relación con Flutter? Esto significa que no hay configuraciones en Clean Flutter para permitir tal comportamiento, solo las herramientas que ofrece la plataforma subyacente.
En el contexto de Android, el uso de este permiso le permitirá usar esta función para contenedores de IU de Android (debe solicitarse explícitamente a través de una pantalla de administración de permisos como esta)
if(!Settings.canDrawOverlays(this)){
// ask for setting
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, REQUEST_OVERLAY_PERMISSION);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_OVERLAY_PERMISSION) {
if (Settings.canDrawOverlays(this)) {
// permission granted...
}else{
// permission not granted...
}
}
}
Y no estoy seguro de que haya un análogo de Flutter todavía.
Explorando más a fondo, resulta que Flutter se representa en contenedores especiales de Android. FlutterActivity
y FlutterFragment
.
Para estos dos, puede forzar el comportamiento previsto con el permiso correspondiente. Toda la interfaz de usuario de Flutter tendrá la posibilidad de dibujarse como superposición. Pero si desea que solo algunas partes de su IU de aleteo se dibujen como superposiciones, por ejemplo, algunos diálogos de aleteo o partes de la ruta de navegación, no podrá lograrlo tan fácilmente (solo creará contenedores y canales de IU nativos de Android separados su interfaz de usuario de flutter allí; AFAIK, no se recomienda porque tener varios contenedores de interfaz de usuario de flutter puede causar problemas)