Por qué Flutter, dónde NO lo recomendamos, librerías que usamos por defecto, arquitectura, CI/CD y testing. Sin folclore.
TL;DR
Dribba es la única agencia española en el directorio oficial de consultores Flutter de Google y trabajamos con Flutter en producción desde 2017. Para apps con UI propia, iOS + Android paritarios y MVPs entre 6 y 14 semanas, es nuestra apuesta por defecto. NO recomendamos Flutter cuando hay audio profesional en tiempo real, AR/VR avanzado, juegos 3D pesados o integraciones muy bajas con CarPlay/Android Auto. Nuestro stack estándar: Riverpod (estado), GoRouter (navegación), Dio (HTTP), freezed (modelado), get_it (DI), flutter_test + mocktail (testing). Arquitectura Clean Architecture organizada por features, CI/CD en Codemagic o Fastlane, observabilidad con Sentry.
Por qué Flutter
Trabajamos en Flutter desde 2017, cuando todavía era alpha y la mayoría de las agencias ni sabían que existía. Esa antigüedad nos ahorra (y te ahorra) el coste de aprendizaje: cuando Google lanza una nueva versión, cuando hay un breaking change crítico, cuando aparece una vulnerabilidad en un paquete clave, lo hemos visto antes.
En 2026 Flutter es la apuesta sensata para el 90% de las apps que llegan a una agencia: una sola base de código, paridad iOS/Android desde el primer commit, hot reload < 1 s, engine de render (Impeller) maduro y un ecosistema con backing real de Google. Para startups con time-to-market corto y mantenimiento sostenible, es difícil que React Native o nativo justifiquen su coste adicional.
El otro 10% de casos sí pide otra tecnología y lo decimos en la primera llamada. No vendemos Flutter como si fuera universal: vendemos la decisión correcta.
Cuándo NO usar Flutter
Si tu producto encaja en alguno de los siguientes, te orientamos hacia nativo (Swift/Kotlin) o, en casos puntuales, React Native.
Stack estándar Dribba
Esta es nuestra plantilla inicial cuando arranca un proyecto Flutter. Si hay una razón concreta para sustituir una pieza, lo discutimos en el discovery.
Arquitectura por defecto
No usamos MVC ni MVVM por defecto. Cada feature es una vertical aislada con sus propias capas, lo que hace que se pueda añadir, quitar o sustituir sin tocar el resto.
Widgets + ViewModels (Riverpod providers). Sin lógica de negocio. Recibe estado, dispara intents. Lo único que cambia cuando el diseñador iteró sobre UX.
Entities, use cases y repositories abstractos. Cero dependencias de Flutter. Lo que sobreviviría a un rewrite a otra UI framework. Aquí vive la lógica de negocio.
Implementaciones concretas: REST con Dio, Firebase, GraphQL, caches locales con Hive/Drift. Aquí se cambia el back-end sin tocar UI ni casos de uso.
Utilidades cross-feature, theme, design tokens, components compartidos. Cuidado con engordarlo: lo que solo usa una feature, vive en esa feature.
CI/CD
Desde el sprint 0 montamos automatización completa. Cero scripts manuales en producción.
Testing strategy
No perseguimos coverage por el coverage. Apuntamos a cobertura accionable: domain y data al 80%+, UI crítica con widget tests, flows clave con integration tests.
Una decisión técnica que solemos defender
Riverpod sobre Bloc por defecto. Bloc fuerza más boilerplate y, en 2026, la inmensa mayoría de los proyectos no necesitan la separación rígida de events/states que Bloc impone. Riverpod da el mismo control con menos código y mejor testabilidad. Si el equipo cliente ya domina Bloc, lo respetamos — pero no es nuestra opción por defecto.
Preguntas frecuentes
Flutter en producción se usa por equipos muy diversos: BMW (apps de coche conectado), Google Ads, Toyota, eBay Motors, Alibaba, Square, ByteDance, Reflectly, y la mayoría de las apps de fintech, healthtech y retail lanzadas en los últimos 3 años en España y LatAm. El ecosistema enterprise creció especialmente entre 2023 y 2026 a medida que Impeller (el engine moderno) estabilizó la performance.
Clean Architecture organizada por features, no por capas. Cada feature contiene sus capas presentation/domain/data internamente. Esto permite añadir o quitar features sin tocar el resto del código y facilita que equipos paralelos trabajen sin pisarse. Para apps simples (MVP de 5–10 pantallas) reducimos la rigidez de la separación; para apps con dominio rico, mantenemos las tres capas estrictas.
Tres razones objetivas: (1) Menos boilerplate — Riverpod prescinde de la dualidad event/state que Bloc impone y reduce ~30–40% del código de estado. (2) Mejor testabilidad — los providers se pueden overrides en tests sin mocks complejos. (3) Tipado más explícito gracias a la API generada de Riverpod 2. Bloc sigue siendo válido si el equipo cliente ya lo usa o si el patrón event-driven encaja con el dominio.
Sí, sin reservas para apps de UI. Impeller (el engine nuevo de render) está estable desde 2024 en iOS y Android. Las releases de Flutter son trimestrales y conservadoras: breaking changes documentados con antelación y herramientas de migración (dart fix). La mayoría de los bugs críticos en 2026 vienen de plugins de terceros mal mantenidos, no del core.
Flutter Web compila tu código Dart a JavaScript y dibuja con Canvas o con Skia (vía CanvasKit). Funciona para internal tools, dashboards y prototipos rápidos donde quieres compartir UI con la app móvil. NO lo recomendamos para landing pages, blogs ni productos donde el SEO o el first paint importan: para eso Next.js o SvelteKit son la decisión correcta.
Sí. Flutter expone Method Channels y Pigeon (mejor para tipos seguros) para invocar código nativo desde Dart. Lo usamos cuando un plugin oficial no cubre una API específica (Bluetooth LE avanzado, sensores propietarios, integración con SDK comercial de terceros). El coste: cada integración nativa duplica el work iOS+Android, así que solo se hace cuando hay justificación clara.
El rango típico va del 40% al 70% del coste de un rewrite desde cero, dependiendo de cuánto del dominio se pueda extraer limpiamente. La migración por feature (un módulo a la vez) suele ser más segura que big-bang. Las apps con dominio bien aislado se migran más rápido; las que tienen lógica de negocio mezclada en ViewControllers requieren refactor previo.
¿Listo para empezar?