En este proyecto contaré como fue mi paso a paso. Este proyecto esta optimizado principalmente para Android.
Para instalar y ejecutar esta aplicación, sigue estos pasos:
Primero, debes clonar el repositorio de GitHub. Abre tu terminal y ejecuta:
git clone https://github.com/Ariel-Eitner/vision-test.git
Una vez clonado el repositorio, navega a la carpeta del proyecto y ejecuta el siguiente comando para instalar todas las dependencias necesarias:
npm i
Para iniciar el servidor Metro ejecuta:
npx react-native start
una vez iniciado el servidor de metro, presiona la A para abrir la aplicación en un celular conectado
Debido a que algunas librerías estaban obsoletas o poco mantenidas, me he encontrado con una serie de problemas
En esta librería, ellos recomiendan usar react-native-cameraroll para guardar las fotos, pero resulta que la biblioteca no esta mantenida y ya no es compatible con las nuevas versiones y arquitecturas de React Native, por lo que lo solucione de la siguiente forma:
Debido a que no funcionaba la recomendada, preferí utilizar el sistema fs de react native
npm i react-native-fs
Este nuevo paquete también me daba errores, por lo que al investigar la documentación, encontré el issue
#1197 — The Future of react-native-fs
En la página
https://github.com/itinance/react-native-fs/issues/1216
En esa página está esta cita
Hello folks!
As the sorry state of this library started to compromise my projects, I decided to take it into my own hands, to give it the maintenance it well deserves, as a library providing essential functionality for many apps. I got no reply yet from the current owner in #1115, thus at least for the time being my fork of the library will live at https://github.com/birdofpreyru/react-native-fs, and it will be published to NPM under the name @dr.pogodin/react-native-fs.
Al final de cuentas, utilice el paquete recomendado por el anterior:
npm i @dr.pogodin/react-native-fs
Debido al poco tiempo y a intentar hacerlo funcional, la app solo tiene unas pocas features, hecha con las siguientes tecnologías:
-
React Native 0.73.40
-
TypeScript
-
Redux Toolkit 2.2.1
-
@dr.pogodin/react-native-fs 2.24.1
La arquitectura de este software la hice sobre las bases fundacionales de React y React Native, las cuales permiten tener componentes reutilizables y modulares:
Punto de entrada principal de la aplicación. Esta la modifique para que pueda aceptar la Store de Redux, para evitar el prop drilling.
Aquí mantuve una arquitectura bien delimitada, donde tengo el Front-End separada de la lógica, se divide en varias partes:
-
Components: Carpeta dedicada a los renderizados, ya que manejan la parte visual de la APP
-
Hooks: Arme hooks personalizados llamados useButtons y useGallery, para poder tener su lógica encapsulada y reutilizarla en todos los componentes que los precisen.
-
Icons: Carpeta separada para los iconos
-
Redux: Aquí puse los slices, reducers y el store para manejar estados globales.
-
Types: Para declaraciones del tipo d.ts para mejorar los tipos de TS.
Si bien el tiempo que tuve para hacerlo fue reducido, quiero demostrar mis habilidades a la hora de programar, de manejar los tipos de datos y de como he resuelto problemas inesperados como la deprecación de bibliotecas y mi habilidad para adaptarme a esos cambios y cambiar la arquitectura según sea necesario