Requisitos

Versiones y Software Recomendado

Este proyecto utiliza Flutter versión 3.2.3 y Dart versión >=3.2.3 <4.0.0.

Para el desarrollo o edición de la app, puedes usar cualquier IDE como Visual Studio Code o Android Studio. Este proyecto se creó con Visual Studio Code, por lo que se recomienda utilizarlo como editor de código, aunque puedes usar el que prefieras.

Introducción al Proyecto

Estructura Inicial

Ejemplo de pubspec.yaml

Cuando descargues el proyecto Gabriel Coach, lo encontrarás comprimido en un archivo ZIP. Al descomprimirlo, verás un archivo HTML llamado leeme.html y dos carpetas. Una de esas carpetas, leeme, contiene los recursos utilizados por el archivo HTML, como imágenes y scripts, por lo que no es necesario hacer nada con ella.

La carpeta principal del proyecto se llama gabrielcoach. Esta carpeta es clave, ya que contiene todos los archivos y carpetas necesarias para el desarrollo de la aplicación.


Estructura de la Carpeta gabrielcoach

Dentro de gabrielcoach, encontrarás dos subcarpetas:


  • .idea: Esta carpeta está relacionada con configuraciones internas de tu IDE, por lo que no es necesario modificarla.
  • app: Esta es la carpeta más importante, ya que contiene todo el código fuente y recursos de la aplicación Gabriel Coach. Aquí es donde encontrarás el archivo pubspec.yaml, el archivo main.dart y las demás carpetas mencionadas a lo largo de esta documentación.

Para empezar a trabajar en el proyecto, dirígete a la carpeta app, que es el núcleo del desarrollo.

Archivo pubspec

Definición y Dependencias

Ejemplo de pubspec.yaml

El archivo pubspec.yaml es fundamental en cualquier proyecto Flutter. Aquí se define el nombre del proyecto, su versión, las dependencias necesarias, y otros recursos importantes como los assets y las fuentes que utilizará la app.

En este archivo, las fuentes personalizadas se encuentran en la carpeta assets/fonts, como por ejemplo Montserrat-Bold y Montserrat-Medium, que dan un estilo elegante a la app. Las imágenes están organizadas en la carpeta assets/images.

En cuanto a las dependencias, se incluyen varias importantes:

  • firebase_auth: Maneja la autenticación de usuarios.
  • cloud_firestore: Utilizado para almacenar y recuperar datos de Firestore.
  • shared_preferences: Permite guardar información localmente en el dispositivo.
  • provider: Gestión del estado de la app.

Cambio del Nombre del Paquete

Utilizando el Plugin change_app_package_name

Cambio de nombre del paquete

El plugin change_app_package_name se utiliza para cambiar el nombre del paquete en proyectos Flutter de manera sencilla. Cambiar el nombre del paquete es importante cuando quieres lanzar tu app en las tiendas de aplicaciones, ya que debe tener un identificador único tanto en Android como en iOS.

Para cambiar el nombre del paquete, primero debes añadir el plugin al archivo pubspec.yaml:

dependencies:
          change_app_package_name: ^1.4.0

Luego, ejecuta el siguiente comando para cambiar el nombre del paquete:

dart run change_app_package_name:main com.nuevo.nombre.paquete

Puedes cambiar el nombre del paquete para Android e iOS simultáneamente o por separado utilizando las siguientes opciones:

  • Cambiar solo Android: --android
  • Cambiar solo iOS: --ios

Es importante asegurarte de que el nombre del paquete sea único para evitar conflictos con otras aplicaciones. Puedes encontrar más información sobre este plugin en su página oficial: change_app_package_name.

Archivo main

Función Principal de la App

Ejemplo de main.dart

El archivo main.dart es el punto de entrada de la aplicación Flutter. Es aquí donde se inicializan las dependencias clave como Firebase, que proporciona autenticación y almacenamiento en la nube a través de Firebase Auth y Firestore.

También se maneja la configuración del idioma de la app usando AppLocalization, lo cual permite tener la app en varios idiomas. SharedPreferences es utilizado para guardar ajustes como el idioma y el tema (oscuro o claro) seleccionados por el usuario, utilizando Provider para gestionar el estado global de la app.

Estructura y Carpetas

Organización del Proyecto

Ejemplo de main.dart

El proyecto está organizado de la siguiente manera:

  • assets: Aquí se almacenan imágenes, tipos de letra, iconos, modelos 3D, y archivos de traducción.
  • android: Contiene los archivos de configuración específicos para la plataforma Android.
  • ios: Contiene los archivos de configuración específicos para la plataforma iOS.
  • lib: Esta es la carpeta principal donde se almacenan todos los archivos esenciales de la aplicación, a continuacion una lista de carpetas dentro de lib.
    • backend: Contiene archivos y carpetas para el lado administrador del sistema.
    • config: Archivos de configuraciones importantes.
    • designs: Archivos relacionados con el diseño de la aplicación.
    • functions: Archivos de funciones reutilizables.
    • screens: Carpeta que contiene todas las pantallas y sus archivos.
    • widgets: Widgets reutilizables que se utilizan en diferentes partes de la app.
  • main.dart: Archivo principal de la aplicación.
  • firebase_options.dart: Archivo de configuración para Firebase.

Carpeta assets

Archivos y Organización

Imagen de la carpeta assets

La carpeta assets contiene todos los recursos estáticos como imágenes, fuentes, iconos, archivos de traducción y modelos 3D utilizados en la aplicación. Para agregar nuevos archivos o carpetas en esta sección, simplemente se deben colocar en la carpeta assets y registrar su ubicación en el archivo pubspec.yaml.


  • fonts: Esta carpeta almacena todos los tipos de letras disponibles en la aplicación. Para agregar un nuevo tipo de letra, simplemente descárguelo, colóquelo en esta carpeta y agregue la información en el archivo pubspec.yaml para que esté disponible en la app.
  • gif: Aquí se almacenan las imágenes en formato GIF. Para agregar nuevas imágenes GIF, colóquelas en esta carpeta y registre la información en el archivo pubspec.yaml.
  • icon: En esta carpeta se encuentran los iconos utilizados en la aplicación. Para añadir nuevos iconos, siga el mismo procedimiento: colóquelos en esta carpeta y actualice el archivo pubspec.yaml.
  • images: Aquí se guardan todas las imágenes generales de la aplicación. Para añadir más imágenes, insértelos en esta carpeta y actualice el archivo pubspec.yaml.
  • lang: Esta carpeta contiene los archivos de traducción es.json y en.json, que almacenan las traducciones en español e inglés, respectivamente. Para añadir nuevas traducciones, modifique estos archivos. Si desea agregar un nuevo idioma, cree un nuevo archivo JSON, agréguelo en esta carpeta, regístrelo en el archivo pubspec.yaml y configure el idioma en el archivo main.dart.
  • tre_den: En esta carpeta se almacenan todos los modelos 3D utilizados en la aplicación. Para agregar nuevos modelos, siga el mismo proceso: colóquelos en esta carpeta y actualice el archivo pubspec.yaml.

Carpeta backend

Sección de Administración

Imagen de la carpeta backend

La carpeta backend, ubicada dentro de lib, contiene todas las pantallas y funcionalidades relacionadas con la administración del sistema. Aquí se gestionan diversas operaciones como agregar ejercicios, entradas, páginas, contenidos, recetas, deportes, entre otros elementos de la aplicación.


  • admin: Dentro de esta carpeta se encuentran los archivos y widgets correspondientes a la pantalla principal de administración, la barra superior y la barra inferior.
    • admin_start_screen.dart: Este archivo establece la primera pantalla que se ve en la sección de administración y define las 5 pantallas a las que se puede acceder desde los botones de la barra inferior. Aquí se gestiona la navegación inicial y la configuración principal del administrador.
    • widgets: Esta carpeta contiene dos archivos importantes que estructuran el diseño y la funcionalidad de la sección de administración.
      • admin_main_screen_layout.dart: Archivo que organiza el diseño principal de la pantalla de administración.
      • admin_custom_drawer.dart: Este archivo contiene toda la configuración de la barra lateral (drawer). Desde aquí, se pueden agregar nuevos elementos al menú lateral o editar los existentes. Este archivo trabaja en conjunto con otros archivos mencionados anteriormente y no se recomienda modificar su estructura sin entender bien su funcionamiento.

Carpeta config

Archivos de Configuración

Imagen de la carpeta config

La carpeta config dentro de lib contiene los archivos clave para la configuración de la aplicación. Aquí se almacenan archivos relacionados con la personalización de traducciones, notificaciones, colores, y validaciones, entre otros aspectos importantes.


  • lang: Esta carpeta contiene el archivo app_localization.dart, el cual maneja todas las configuraciones de traducción de la aplicación. Para agregar nuevos idiomas, es necesario editar este archivo y asegurarse de que la información del nuevo idioma se cargue correctamente en el sistema.
  • notifiers: En esta carpeta se almacenan todos los archivos de configuración para los notifiers que se utilizan en la aplicación. Estos notifiers gestionan el estado y las notificaciones internas, ayudando a que la app responda correctamente a eventos y cambios.
  • utils: Aquí se encuentran dos archivos importantes:
    • appcolors.dart: Archivo donde se definen todos los colores usados en la aplicación. Si es necesario cambiar el esquema de colores, este es el archivo que se debe editar.
    • utils_snackbar.dart: Widget reutilizable que gestiona las snackbars en la aplicación. Este archivo define cómo se muestran las notificaciones emergentes en la app.
  • validator: En esta carpeta se encuentran los archivos que manejan las validaciones realizadas en la pantalla de registro, asegurando que los datos ingresados por el usuario cumplan con los criterios establecidos antes de ser enviados o procesados.

Carpeta designs

Archivos de Diseño y Tema

Imagen de la carpeta designs

La carpeta designs dentro de lib almacena todos los archivos relacionados con el diseño y la configuración del tema visual de la aplicación. Esta carpeta es esencial para definir la apariencia y la experiencia de usuario dentro de la app.


  • themes.dart: Este archivo contiene todas las configuraciones relacionadas con el diseño de la app. Aquí se definen los tamaños de los textos, los colores, los tipos de letra, y otros aspectos visuales de la interfaz.
  • Diseño general: En este archivo también se configuran elementos específicos como los dropdowns, scaffold, listviews, y otros componentes relacionados con el diseño general de la app.

Carpeta functions

Funciones de Administración y Usuarios

Imagen de la carpeta functions

La carpeta functions dentro de lib almacena todos los archivos de funciones que se utilizan tanto para la administración (backend) como para el uso general de los usuarios (frontend). Esta carpeta es esencial para el funcionamiento de las diversas tareas que realiza la aplicación.


  • Estructura organizada: La mayoría de los archivos están organizados en carpetas específicas para facilitar la localización y el trabajo con el archivo correcto.
  • Archivos genéricos: Algunos archivos no se encuentran en carpetas porque son funciones genéricas o no requieren ser utilizadas en muchos códigos.
  • Funciones específicas: Existen funciones para realizar tareas como subir imágenes, revisar roles de usuario, publicar contenido, visualizar información y mucho más, abarcando tanto el lado administrativo como el de los usuarios.

Carpeta screens

Pantallas de los Usuarios (Frontend)

Imagen de la carpeta screens

La carpeta screens dentro de lib almacena todos los archivos de las pantallas del lado de los usuarios, también conocido como frontend. Aquí se definen todas las interfaces con las que los usuarios interactúan en la aplicación.


  • Estructura organizada: La mayoría de los archivos están organizados en carpetas específicas, cada una con un nombre que identifica claramente la pantalla o el módulo que contiene, lo que facilita el acceso y la modificación de estos archivos.
  • Archivos clave: Los archivos que no están en carpetas son sumamente importantes para el funcionamiento general de la app. Estos están identificados claramente para facilitar su reconocimiento y edición en caso de que sea necesario hacer ajustes críticos.

Carpeta widgets

Widgets Reutilizables

Imagen de la carpeta widgets

La carpeta widgets dentro de lib contiene todos los archivos relacionados con widgets reutilizables que se utilizan en diferentes partes de la aplicación. Estos widgets son componentes de interfaz que ayudan a construir las pantallas de manera modular y eficiente.


  • Carpeta grid_view: Dentro de widgets, se encuentra la carpeta grid_view que almacena todos los tipos de grid que se utilizan en la aplicación, permitiendo diferentes disposiciones de elementos en cuadrícula.
  • Archivos importantes: Al igual que en la carpeta backend, en esta carpeta también se encuentran dos archivos clave para la barra superior, barra inferior y el drawer (barra lateral). Estos archivos son reutilizados en varias pantallas para garantizar un diseño y funcionalidad consistentes en toda la app.
  • Otros archivos: Además, hay una variedad de archivos que no están en carpetas específicas, pero que contienen widgets como appbars (barras de aplicaciones), decoraciones, gráficos (charts), entre otros. Estos componentes se utilizan de manera recurrente en la aplicación para mejorar la experiencia visual y la navegación.