Crea tu primera app móvil multiplataforma con Flutter y Dart

Crea tu primera app móvil multiplataforma con Flutter y Dart

Meta title: Tutorial Flutter Dart: Crea tu primera app móvil multiplataforma paso a paso

Meta description: Guía práctica para crear apps móviles con Flutter y Dart: instalación, estructura, widgets Flutter, navegación, gestión de estado Provider, consumo de APIs, almacenamiento local, theming, responsive, i18n, Firebase y publicación.

URL slug: tutorial-flutter-dart-crear-apps-moviles

Tu primera app móvil multiplataforma con Flutter y Dart: guía completa paso a paso

¿Quieres crear apps móviles con Flutter desde cero? En este tutorial Flutter Dart aprenderás a instalar el SDK, configurar Android Studio y Xcode (opcional), crear tu primer proyecto, entender los widgets Flutter, gestionar estado con Provider, navegar con GoRouter, consumir APIs, almacenar datos localmente, aplicar theming y modo oscuro, hacer diseño responsivo, internacionalizar con intl, integrar Firebase Flutter y preparar builds para publicar en tiendas. Ideal para desarrolladores principiantes e intermedios.


1) Requisitos previos

  • Conocimientos básicos de programación (idealmente en Dart, JavaScript o similar).
  • Sistema operativo: Windows, macOS o Linux.
  • 10+ GB libres en disco, 8 GB RAM recomendado.
  • Git instalado y línea de comandos.

Checklist:

  • [ ] Instalaste Git
  • [ ] Tienes permisos de administrador en tu equipo
  • [ ] Espacio y RAM suficientes

2) Instalación del SDK de Flutter

2.1 Windows

Explicación: instala Flutter y valida el entorno con flutter doctor.

2.2 macOS

Explicación: Homebrew simplifica la instalación y actualización en macOS.

2.3 Linux

Explicación: en Linux la instalación suele ser manual; verifica dependencias con flutter doctor.

Checklist:

  • [ ] flutter –version funciona
  • [ ] PATH configurado
  • [ ] flutter doctor sin errores críticos

3) Configuración de Android Studio y (opcional) Xcode

3.1 Android Studio

1) Instala Android Studio (https://developer.android.com/studio)
2) Desde el SDK Manager, instala:

  • Android SDK Platform (última estable)
  • Android SDK Build-Tools
  • Android Emulator
    3) Instala plugins: Flutter y Dart.

Explicación: Android Studio provee SDK, emulador y herramientas necesarias para compilar y depurar Android.

3.2 Xcode (opcional, solo macOS para iOS)

1) Instala Xcode desde App Store.
2) Abre Xcode una vez y acepta las licencias.
3) Instala CocoaPods:

Explicación: Xcode es requerido para compilar y probar en simulador/dispositivo iOS.

Checklist:

  • [ ] Plugins Flutter y Dart en Android Studio
  • [ ] Licencias de Android aceptadas
  • [ ] Xcode y CocoaPods (si compilas para iOS)

4) Crear y ejecutar tu primer proyecto

4.1 Crear proyecto

Explicación: genera una plantilla con una app de contador.

4.2 Ejecutar en emulador o dispositivo

  • Inicia un emulador Android desde AVD Manager o:

  • Conecta un dispositivo físico Android (activa Depuración USB).
  • En iOS (macOS): abre el simulador con:

  • Ejecuta:

Explicación: flutter run detecta dispositivos/emuladores conectados y lanza la app con hot reload.

Checklist:

  • [ ] Proyecto creado sin errores
  • [ ] Emulador/simulador o dispositivo físico reconocido
  • [ ] App ejecutando con hot reload activo

5) Estructura de carpetas del proyecto

Estructura principal:

  • android/: configuración de Android (Gradle, AndroidManifest.xml)
  • ios/: configuración de iOS (Xcode, Info.plist)
  • lib/: código Dart de tu app
  • test/ e integration_test/: pruebas
  • pubspec.yaml: dependencias y assets

Checklist:

  • [ ] Identificaste lib/ como carpeta principal de código
  • [ ] Revisaste pubspec.yaml
  • [ ] Ubicaste Manifests (AndroidManifest.xml, Info.plist)

6) Fundamentos de widgets Flutter

6.1 StatelessWidget vs StatefulWidget

Explicación: StatelessWidget no mantiene estado; StatefulWidget sí, usando setState.

Checklist:

  • [ ] Diferencias entre Stateless y Stateful claras
  • [ ] Practicaste setState()

7) Layout y composición: Row, Column, Stack

Explicación: Column apila verticalmente, Row horizontalmente, Stack superpone elementos y Positioned posiciona absolutos.

Checklist:

  • [ ] Usaste Row/Column para estructuras básicas
  • [ ] Comprendiste Stack/Positioned para overlays

8) Navegación con GoRouter (y alternativa Navigator 2.0)

Instala GoRouter en pubspec.yaml y define rutas tipadas.

Explicación: go_router simplifica Deep Links, rutas declarativas y redirecciones.

Alternativa: Navigator 2.0 nativo con RouterConfig si prefieres no depender de paquetes externos.

Checklist:

  • [ ] Definiste rutas declarativas
  • [ ] Probaste navegación y paso de parámetros

9) Gestión de estado con Provider (y alternativa Riverpod)

Explicación: Provider expone AppState y permite escuchar cambios. Alternativa: Riverpod (más segura y escalable) con Riverpod/Flutter Riverpod.

Checklist:

  • [ ] AppState con ChangeNotifier
  • [ ] Providers añadidos en el árbol de widgets
  • [ ] Incremento y toggle de tema funcionando

10) Consumo de APIs con http o Dio + manejo de errores

Explicación: usa Dio con timeouts y captura errores. Con http, usa http.get y jsonDecode.

Checklist:

  • [ ] Cliente HTTP configurado
  • [ ] Manejo de errores con try/catch
  • [ ] Respuestas tipadas o mapeadas

11) Almacenamiento local: SharedPreferences y Hive

Explicación: SharedPreferences para pares clave-valor simples; Hive para datos más complejos/offline.

Checklist:

  • [ ] Inicializaste Hive al inicio
  • [ ] Guardas y recuperas tokens/preferencias

12) Validación de formularios

Explicación: Form y TextFormField con validator y onSaved.

Checklist:

  • [ ] Validaciones implementadas
  • [ ] Mensajes de error claros

13) Theming y modo oscuro

Explicación: centraliza temas con Material 3. Cambia ThemeMode desde Provider.

Checklist:

  • [ ] ThemeData centralizado
  • [ ] Soporte para modo oscuro

14) Diseño responsivo

Explicación: combina MediaQuery y LayoutBuilder para adaptar UI a móviles/tablets.

Checklist:

  • [ ] Breakpoints definidos
  • [ ] Probaste en diferentes tamaños

15) Internacionalización básica con intl

Explicación: habilita idiomas y usa intl para formateo de fechas/números. Para textos traducidos, considera ARB y generación con herramientas de l10n de Flutter.

Checklist:

  • [ ] Locales y delegados agregados
  • [ ] Formateo con intl probado

16) (Opcional) Integración con Firebase (Auth y Firestore)

Pasos rápidos:
1) Instala FlutterFire CLI:

2) Inicializa Firebase en main:

3) Autenticación anónima y escribir/leer en Firestore:

Explicación: Firebase Flutter facilita autenticación y base de datos tiempo real con Firestore.

Checklist:

  • [ ] flutterfire configure ejecutado
  • [ ] Firebase.initializeApp en main
  • [ ] Reglas de seguridad revisadas

17) Pruebas: unitarias, de widget e integración

17.1 Unitarias

17.2 De widget

17.3 De integración

Ejecuta:

Checklist:

  • [ ] Al menos una prueba unitaria
  • [ ] Una prueba de widget
  • [ ] Integración mínima funcionando

18) Configuración de archivos clave

18.1 pubspec.yaml completo (ejemplo)

Explicación: lista dependencias clave del tutorial Flutter Dart y assets.

18.2 AndroidManifest.xml

Explicación: INTERNET para llamadas HTTP. Configuración estándar de Flutter.

18.3 Info.plist

Explicación: permite cargas HTTP no seguras en desarrollo. Para producción, usa HTTPS y elimina esta excepción.

Checklist:

  • [ ] pubspec.yaml sin errores
  • [ ] INTERNET en Android agregada
  • [ ] ATS configurado temporalmente en iOS para desarrollo

19) Preparar build de producción y publicar

19.1 Android: APK/AAB

1) Genera keystore (una vez):

2) Configura android/key.properties:

3) android/app/build.gradle (firma):

4) Construye:

5) Sube el .aab a Google Play Console y completa listados y pruebas.

19.2 iOS: build y subida básica (macOS)

1) Abre ios/Runner.xcworkspace en Xcode.
2) Configura Signing & Capabilities con tu equipo y Bundle Identifier único.
3) Incrementa versión y build.
4) Compila archive desde Product > Archive o:

5) Sube con Xcode Organizer o la app Transporter.

Checklist:

  • [ ] Firma configurada (Android/iOS)
  • [ ] Build de release generado
  • [ ] Pruebas en Test/Play Internal Track antes de producción

20) Resolución de problemas comunes

  • flutter doctor muestra issues con Android licenses:
  • Ejecuta flutter doctor –android-licenses y acepta todas.
  • Gradle falla por memoria:
  • Incrementa org.gradle.jvmargs=-Xmx4096m en android/gradle.properties.
  • CocoaPods no instala dependencias:
  • cd ios && pod repo update && pod install. Asegura tener Ruby/Gems actualizados.
  • Emulador Android lento o no arranca:
  • Usa imágenes x86_64/arm64, habilita aceleración (Intel HAXM/Hypervisor o Apple Virtualization).
  • Dispositivo iOS no aparece:
  • Activa Developer Mode en iOS 16+, confía el equipo, revisa certificados en Xcode.
  • Error de red en iOS (NSAppTransportSecurity):
  • Usa HTTPS o configura excepciones puntuales en Info.plist.
  • Problemas con permisos en Android:
  • Declara permisos en AndroidManifest.xml y solicita permisos en tiempo de ejecución si aplica.

Checklist:

  • [ ] Revisaste logs con flutter run -v
  • [ ] Probaste flutter clean && flutter pub get
  • [ ] Validaste configuración específica de cada plataforma

Conclusión y siguientes pasos

Has completado un recorrido integral para crear apps móviles con Flutter: desde instalación y estructura de proyecto hasta widgets Flutter, gestión de estado Provider, navegación con GoRouter, consumo de APIs, almacenamiento local, formularios, theming, diseño responsivo, internacionalización y una introducción a Firebase Flutter, además de pruebas y publicación.

Siguiente paso: construye una mini app real (por ejemplo, notas con login anónimo y Firestore), añade tests y publica una versión beta. ¿Listo para el siguiente nivel? Suscríbete a nuestro boletín y comparte este tutorial Flutter Dart con tu equipo.

Buenas prácticas:

  • Mantén una arquitectura clara (capas: presentation, application/state, domain, data).
  • Maneja errores de red con retroalimentación al usuario y reintentos.
  • Usa const donde sea posible para optimizar renders.
  • Divide widgets en componentes pequeños y reutilizables.
  • Automatiza CI/CD para builds y tests.
  • Mide rendimiento con Flutter DevTools y perf overlays.

FAQ (orientado a featured snippets)

  • ¿Qué es Flutter y por qué usarlo?

  • Flutter es un SDK de UI de Google para crear apps móviles, web y escritorio con un solo código en Dart. Ventajas: rendimiento nativo, widgets propios y hot reload.

  • ¿Qué necesito para empezar con Flutter?

  • Instalar Flutter SDK, Android Studio (y Xcode en macOS), configurar emuladores o dispositivos y correr flutter doctor.

  • ¿Navigator 2.0 o GoRouter?

  • Navigator 2.0 es la base nativa y poderosa; GoRouter abstrae su complejidad con rutas declarativas y soporte de deep links.

  • ¿Provider o Riverpod para gestión de estado?

  • Provider es simple y oficial; Riverpod ofrece inmutabilidad y testing más ergonómico. Elige según complejidad del proyecto.

  • ¿http o Dio para APIs?

  • http es ligero; Dio ofrece interceptores, cancelación y mejores opciones de timeouts/reintentos.

  • ¿Cómo activo modo oscuro?

  • Define lightTheme y darkTheme y alterna ThemeMode con Provider.

  • ¿Cómo hago responsive?

  • Usa MediaQuery, LayoutBuilder, breakpoints y widgets flexibles (Expanded/Flexible). Prueba en diferentes tamaños.

  • ¿Cómo publicar en Play Store y App Store?

  • Genera build de release (AAB/IPA), configura firma, crea listados en tiendas y sigue los procesos de revisión.