Cambio de firma de Android ActivityControlSurface attachToActivity
El parámetro activity de attachToActivity cambió a ExclusiveAppComponent en lugar de Activity.
Resumen
#Un nuevo método de ActivityControlSurface:
void attachToActivity(
@NonNull ExclusiveAppComponent<Activity> exclusiveActivity,
@NonNull Lifecycle lifecycle);
está reemplazando al método ahora obsoleto:
void attachToActivity(@NonNull Activity activity, @NonNull Lifecycle lifecycle);
El método obsoleto existente con el parámetro Activity
se eliminó en Flutter 2.
Contexto
#Para que las Activities personalizadas también proporcionen los eventos del ciclo de vida de la
Activity que los plugins de Flutter esperan utilizando la
interfaz ActivityAware, el FlutterEngine
expuso una API getActivityControlSurface().
Esto permite que las Activities personalizadas indiquen al motor
(con el cual tiene una relación (0|1):1) que
se está acoplando o desacoplando del motor.
Sin embargo, la API anterior tenía el defecto de que no
imponía la exclusión entre las actividades que se conectaban a
engine, lo que permitía relaciones de n:1 entre
la actividad y engine,
causando problemas de interferencia en el ciclo de vida.
Descripción del cambio
#Después de la Issue #21272, en lugar de acoplar tu activity
al FlutterEngine
mediante el uso de:
void attachToActivity(@NonNull Activity activity, @NonNull Lifecycle lifecycle);
API, que ahora está obsoleta; en su lugar usa:
void attachToActivity(
@NonNull ExclusiveAppComponent<Activity> exclusiveActivity,
@NonNull Lifecycle lifecycle);
Ahora se espera una interfaz ExclusiveAppComponent<Activity>
en lugar de una Activity.
La interfaz ExclusiveAppComponent<Activity> proporciona una devolución de llamada (callback)
en caso de que tu activity exclusiva esté siendo reemplazada por
otra activity que se acople al FlutterEngine.
void detachFromActivity();
La API permanece sin cambios y todavía se espera que la llames cuando tu actividad personalizada se destruya de forma natural.
Guía de migración
#Si tienes tu propia activity que contiene un
FlutterView, reemplaza las llamadas a:
void attachToActivity(@NonNull Activity activity, @NonNull Lifecycle lifecycle);
con llamadas a:
void attachToActivity(
@NonNull ExclusiveAppComponent<Activity> exclusiveActivity,
@NonNull Lifecycle lifecycle);
en el ActivityControlSurface
que obtuviste al llamar a
getActivityControlSurface()
en el FlutterEngine.
Envuelve tu activity con un ExclusiveAppComponent<Activity>
e implementa el método de callback:
void detachFromFlutterEngine();
para manejar el reemplazo de tu activity por otra
activity que se esté acoplando al FlutterEngine.
Generalmente, querrás realizar las mismas operaciones de desacoplamiento
que se realizan cuando la activity se destruye de forma natural.
Timeline
#Introducido en la versión: 1.23.0-7.0.pre
En la versión estable: 2.0.0
Referencias
#Bug motivador: Issue #66192—Los componentes de UI no exclusivos acoplados al FlutterEngine causan interferencias de eventos
A menos que se indique lo contrario, la documentación de este sitio refleja Flutter 3.44.0. Página actualizada por última vez el 2026-05-05. Ver código fuente oreportar un problema.