Mi Ubicación — El GPS
El GPS de tu teléfono funciona igual que el de un auto: triangula tu posición usando señales de satélites. Pero en móviles hay una capa extra de seguridad: el Permiso de Ubicación.
La Máquina de Estados
Section titled “La Máquina de Estados”Gestionar un sensor no es algo instantáneo. La app pasa por varias etapas que debemos controlar para no “romper” la experiencia del usuario (UX).
Esperando acción del usuario
Solicitando satélites y permisos
Coordenadas listas para el mapa
Acceso bloqueado por el usuario
El Hook: useUbicacion.ts
Section titled “El Hook: useUbicacion.ts”Escribir esta lógica en cada pantalla sería un error. Creamos un Hook para centralizar la complejidad. Es como tener un “mando a distancia” que cualquier pantalla puede usar.
// 📌 Concepto: Encapsulamiento de lógica asíncrona// Gestionar el GPS es complejo (permisos, errores, carga).// Al crear un "Hook" (useUbicacion), limpiamos la pantalla principal de código aburrido.export const useUbicacion = () => { // 🚦 'idle' significa quieto, 'cargando' buscando satélites, 'obtenida' éxito. const [estado, setEstado] = useState('idle'); const [coordenadas, setCoordenadas] = useState(null);
const solicitar = async () => { setEstado('cargando');
// ⚠️ El Sistema Operativo (Android/iOS) exige que el usuario acepte que la app lo rastree. // Foreground significa "solo mientras la app está abierta y en pantalla". const { status } = await Location.requestForegroundPermissionsAsync();
// 🛑 Si el usuario dice "No", no podemos hacer nada. Debemos respetar su privacidad. if (status !== 'granted') { setEstado('permisoDenegado'); return; }
// 🎯 Una vez con permiso, pedimos la posición actual. // Esto puede tardar según si el usuario está bajo techo o en la calle. const loc = await Location.getCurrentPositionAsync({}); setCoordenadas(loc.coords); setEstado('obtenida'); };
// 🎁 Devolvemos estas tres cosas para que la pantalla sepa qué mostrar. return { estado, coordenadas, solicitar };};Gestión de Permisos
Section titled “Gestión de Permisos”El usuario es el dueño de sus datos. Debemos ser claros en por qué pedimos la ubicación.
| Acción | Resultado en la App |
|---|---|
| ✅ Permite | GPS activo, marcador centrado en el mapa. |
| ❌ Niega | Muestra tarjeta de error y botón para reintentar. |
Implementación: app/ubicacion.tsx
Section titled “Implementación: app/ubicacion.tsx”Nota cómo la UI cambia totalmente según el estado del hook. Si el permiso es denegado, usamos el color neon-pink para alertar visualmente.