Add-to-app es el mecanismo oficial de Flutter para embeber un módulo de Flutter dentro de una app nativa existente de iOS o Android. La app anfitriona sigue siendo exactamente lo que es —tu base de código en Swift o Kotlin, tu proceso de publicación, tus usuarios— y Flutter llega como un módulo compilado detrás de ella, renderizando las pantallas que decidas darle. Cada una de esas pantallas se escribe una vez y funciona en ambas plataformas.
Esta página es para equipos que quieren Flutter dentro de la app que ya tienen: un producto nativo que nadie va a reescribir, cuyas próximas funcionalidades siguen costando el doble porque hay que construirlas por separado para iOS y Android. Si tu objetivo real es acabar enteramente en Flutter, ese es otro tipo de proyecto con la misma mecánica: lee mejor migración desde React Native y nativo, que es honesta al reconocer que es una reescritura. Aquí no se reescribe nada: la app nativa sigue siendo el producto, y Flutter se gana su sitio funcionalidad a funcionalidad.
Los proyectos que llevamos
- Una funcionalidad piloto: una funcionalidad acotada construida en Flutter y publicada dentro de tus dos apps nativas, con el coste de integración y el beneficio medidos en lugar de discutidos
- Igualar funcionalidades entre plataformas: la pantalla que tu app de iOS tiene y la de Android no (o al revés), construida una vez para ambas en lugar de una segunda vez para una
- La superficie nueva: un programa de fidelización, un flujo de reservas, un chat; una adición autocontenida a un producto nativo maduro, que llega a ambas plataformas con un solo presupuesto
- Cimientos de adopción: el andamiaje del módulo, la integración del router, el cableado de CI y los contratos de platform channels bien montados, para que tus propios ingenieros publiquen las funcionalidades
Para quién es, y quién debería migrar en su lugar
Add-to-app se amortiza bajo condiciones concretas, y preferimos nombrarlas antes que venderle una integración a un equipo que necesita otra cosa.
Señales de que add-to-app encaja
- Cada funcionalidad de la hoja de ruta se construye dos veces, y las versiones de iOS y Android de tu app han empezado a distanciarse en capacidades
- La app es demasiado grande o está demasiado probada para reescribirla, así que «usa Flutter y ya» nunca ha sido una respuesta disponible
- Quieres evaluar Flutter con trabajo real de producción —una funcionalidad, usuarios reales, con mediciones— antes de asumir un compromiso mayor
- Dotar de personal por igual a dos equipos de plataforma es difícil, y las superficies nuevas se atascan en la plataforma que ande corta de gente ese trimestre
Cuándo NO es la decisión correcta
- La app es lo bastante pequeña como para que una construcción nueva en Flutter o una migración pantalla a pantalla cueste menos que mantener una costura nativo–Flutter: la integración tiene sobrecoste, y una app anfitriona pequeña no puede amortizarlo
- La decisión de acabar 100 % en Flutter ya está tomada: entonces llévalo como una migración desde el primer día, con un mapa de migración, en lugar de derivar hacia una
- La app ya es React Native: embeber un segundo runtime multiplataforma junto al primero agrava el problema en vez de resolverlo; las opciones realistas de ese equipo son quedarse donde está o migrar
- La funcionalidad que quieres es una capacidad profunda de plataforma —una experiencia centrada en widgets, funcionalidad pensada para el Watch— donde Flutter es la herramienta equivocada, y te lo diremos
La lectura honesta: una app híbrida es una costura permanente: dos cadenas de herramientas, dos conjuntos de convenciones y una frontera que todos los ingenieros del equipo tienen que entender. Add-to-app merece ese coste cuando la app anfitriona es demasiado grande para reescribirla y la hoja de ruta sigue pagando el impuesto de las dos plataformas. Si ninguna de las dos cosas es cierta en tu app, una de las páginas vecinas es la mejor respuesta, y la primera llamada es donde te decimos cuál.
Cómo funciona la adopción incremental
El flujo add-to-app
La app nativa sigue siendo el producto
Tus apps de iOS y Android siguen publicándose sin cambios: sin congelaciones, sin reescritura paralela, sin un cambio de golpe en el horizonte
Se embebe el módulo de Flutter
Un módulo de Flutter se integra en ambas apps anfitrionas, compartiendo su navegación, autenticación y analítica mediante contratos definidos
Se publica la funcionalidad piloto
Una funcionalidad acotada se construye una vez en Flutter y se lanza dentro de ambas apps, midiendo tamaño y coste de arranque antes y después
La adopción crece funcionalidad a funcionalidad
Cada superficie nueva que aterriza en el módulo es una que no construiste dos veces, y cada una es una decisión, no una obligación
Tú decides el final del camino
Quédate en híbrido indefinidamente, entrega el módulo a tu propio equipo o convierte el impulso en una migración completa; cada frontera es un punto de parada
El flujo es deliberadamente la misma maquinaria que usa nuestro servicio de migración: un módulo de Flutter detrás de un router compartido, pantallas que se trasladan una a una. La diferencia es el destino: una migración retira la app anfitriona al final, y la adopción nunca tiene por qué hacerlo. Eso también significa que la adopción se convierte limpiamente en una migración más adelante si el módulo se lo gana, sin tirar nada.
Qué exige realmente add-to-app
Un solo motor, con un ciclo de vida gestionado
Un módulo de Flutter trae consigo el motor de Flutter, y el motor es un recurso que la app anfitriona debe gestionar deliberadamente: precalentado para que la primera pantalla de Flutter se abra sin un arranque visible, compartido entre puntos de entrada en lugar de instanciarse por pantalla, y liberado cuando la plataforma reclama memoria. Hacerlo mal es invisible en una demo y evidente en producción. Es lo primero que construimos, no lo último que afinamos.
Navegación a través de la frontera
A los usuarios no les importa qué framework renderizó la pantalla en la que están, y la navegación debe actuar en consecuencia: gestos de retroceso que se comportan según la convención de cada plataforma, enlaces profundos que aterrizan en pantallas de Flutter con la misma fiabilidad que en las nativas, y estado que sobrevive al cruce en ambas direcciones. El contrato de router entre anfitriona y módulo es la pieza de la arquitectura add-to-app que decide si la costura es invisible o una fuente permanente de bugs.
Servicios compartidos, prestados en lugar de duplicados
Tu app ya tiene autenticación, analítica, red y feature flags. El módulo de Flutter debe tomarlos prestados a través de platform channels, no crear copias propias, que es la vía por la que una app híbrida acaba con dos sesiones, dos esquemas de eventos y métricas en las que nadie confía. Definir esos contratos de canal con precisión es la mayor parte del proyecto de cimientos, y es trabajo que rinde en cada funcionalidad que viene después.
Dos cadenas de herramientas en un solo pipeline
Tras la integración, tu CI/CD compila el módulo de Flutter y ambas apps anfitrionas, y el módulo se versiona contra dos trenes de publicación que no siempre se moverán juntos. Cableamos la compilación del módulo en tu pipeline existente —con caché, reproducible y propiedad de tu repositorio en lugar de un portátil— porque una integración que tu CI no puede compilar no está integrada.
Una costura con la que tus diseñadores puedan vivir
Flutter dibuja sus propios píxeles, y eso tiene dos caras: no heredará tus componentes nativos, pero reproducirá tu sistema de diseño con exactitud, una vez que tus tokens, tipografía y espaciados estén trasladados al tema del módulo. Hacemos ese traslado como parte de los cimientos, para que un usuario que pasa con el scroll de una pantalla nativa a una de Flutter no tenga forma de saber dónde estaba la frontera.
Los costes, medidos en lugar de afirmados
Embeber Flutter añade peso real: del orden de varios megabytes en una build de release de Android y algo más en iOS, además del arranque del motor la primera vez que se abre una pantalla de Flutter. Las cifras exactas dependen de tu app, y por eso los entregables del piloto incluyen las mediciones de antes y después del tamaño del binario y del tiempo de arranque: decides si ir más lejos con datos de tu propio producto, no de un artículo de benchmarks.
Precedente en producción
Add-to-app lleva años siendo un modelo de integración soportado de Flutter, y su usuario más conocido es Google Pay, que adoptó Flutter dentro de una app nativa existente con cientos de millones de usuarios antes de comprometerse más. El patrón es el que describe esta página: embeber, publicar una superficie, medir y luego decidir. Nuestro propio historial de entrega con él viene del trabajo de migración, donde la misma maquinaria de módulo detrás de un router traslada apps enteras; la adopción usa esa maquinaria con un compromiso más ligero.
Cómo trabajamos
Cimientos y piloto de alcance cerrado. Integramos el módulo en ambas apps anfitrionas, trasladamos los tokens de diseño, definimos los contratos de canal y publicamos la primera funcionalidad: un proyecto acotado con las mediciones como parte del entregable. Nuestro proceso de desarrollo describe cómo llevamos el trabajo acotado semana a semana.
Ingenieros integrados. Nuestros ingenieros de Flutter se suman a tu equipo nativo, en tu repositorio y tus sprints, y construyen el módulo junto a las personas que son dueñas de la app anfitriona; mira ampliación de equipo. Es la forma natural una vez que el piloto se ha validado y el módulo se convierte en un lugar donde tu hoja de ruta aterriza con regularidad.
En cualquiera de los dos casos, enviamos un presupuesto detallado en un plazo de dos días laborables desde que entendemos los requisitos.
Cuánto cuesta una integración add-to-app
El proyecto de cimientos más piloto se presupuesta después de ver la app: el coste de integración lo determina la anfitriona —su arquitectura de navegación, su sistema de compilación, cómo expone sus servicios compartidos— mucho más que la propia funcionalidad piloto, así que una cifra producida antes de mirar la base de código sería ficción. Como referencia, un piloto acotado queda muy por debajo de lo que cuesta una app independiente: los niveles publicados en la página de desarrollo de apps con Flutter empiezan en 12-24 mil € por un MVP completo, y una funcionalidad piloto dentro de una app anfitriona existente es una fracción de ese alcance.
Para el modelo de ingenieros integrados se aplica la tarifa publicada de ampliación de equipo: 8-11,2 mil € por ingeniero senior al mes. Y si el final honesto de la hoja de ruta es una app enteramente en Flutter, presupuéstalo como lo que es: una migración, que esa página dimensiona frente a una reconstrucción completa, no como una adopción a la que se le quedó pequeño el nombre.
Preguntas frecuentes
Dudas habituales de los equipos que se plantean Flutter dentro de una app nativa existente.
Lee la página de migración si el destino es todo Flutter, ampliación de equipo para el modelo de ingenieros integrados, o empieza por el pilar de desarrollo de apps con Flutter.
