📖 Documentación - GrupoIE Asistencia
📌 Importante: Esta aplicación no reemplaza servicios oficiales de emergencia como bomberos, policía o ambulancia pública. Su uso está limitado a redes privadas o internas, configuradas por el usuario, y no garantiza la atención inmediata de terceros oficiales.
- Version: 1.1.000
- Autor: Phixi Labs
- Creado: 7 Marzo, 2025
- Ultima Actualizacion: 27 Agosto, 2025
- Compatibilidad:
- ✅ Android - ✅ iOS
Si tiene alguna pregunta que estéfuera del alcance de este archivo de ayuda, no dude en enviarnos un correo electrónico a través de la Página de soporte.
🛠 Tecnologías Utilizadas
- Flutter (UI y lógica de la aplicación)
- Dart (Lenguaje de programación)
- Firebase (Crashlytics para registro de errores)
- Geolocator (Para obtener ubicación en tiempo real)
- Permission Handler (Para gestionar permisos)
- MethodChannel (Para realizar llamadas y enviar SMS en Android)
- Twilio API (Para enviar mensajes de asistencia vía SMS y WhatsApp)
- Url Launcher (Para abrir el marcador telefónico)
📂 Estructura del Proyecto

🚀 Instalación y Configuración
Requisitos Previos
- Tener Flutter instalado (Guía de instalación)
- Configurar Firebase en el proyecto (Guía de configuración)
- Tener una cuenta de Twilio para enviar SMS y WhatsApp
Dependencias
Asegúrate de incluir las siguientes dependencias en tu
dependencies:
flutter:
sdk: flutter
geolocator: ^10.1.0
permission_handler: ^11.0.1
firebase_core: ^3.0.0
firebase_crashlytics: ^4.0.0
url_launcher: ^6.2.5
http: ^0.13.5
📲 Configuración de Permisos en Android e iOS
🔹 Android
En el archivo android/app/src/main/AndroidManifest.xml, agrega los siguientes permisos dentro de <manifest>
<uses-permission android:name="android.permission.CALL_PHONE"/> <uses-permission android:name="android.permission.SEND_SMS"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.INTERNET"/>
Además, en <application>, agrega esta configuración si usas Twilio
<uses-cleartext-traffic="true"/>
Y en android/app/build.gradle, dentro de defaultConfig
minSdkVersion 21
🍏 iOS
En el archivo ios/Runner/Info.plist, agrega las siguientes claves para solicitar permisos al usuario:
<key>NSLocationWhenInUseUsageDescription</key> <string>Esta aplicación necesita acceder a tu ubicación para enviar alertas.</string>
También debes habilitar la opción de Permissions en el Podfile (ios/Podfile)
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [
'$(inherited)',
'PERMISSION_PHONE=1',
'PERMISSION_LOCATION=1',
'PERMISSION_SMS=1'
]
end
end
end
🎯 Funcionalidades Principales
📌 1. Solicitud de Permisos
Future_requestPermissions() async { Map statuses = await [ Permission.phone, Permission.sms, Permission.locationWhenInUse, ].request(); }
La aplicación solicita permisos para acceder al teléfono, SMS y ubicación.
📌 2. Llamada de Asistencia
Future_makeEmergencyCall() async { if (Platform.isAndroid) { try { await _callChannel.invokeMethod('realizarLlamada', {'numero': _emergencyNumber}); } catch (e) { _launchPhoneDialer(_emergencyNumber); } } else { _launchPhoneDialer(_emergencyNumber); } }
Realiza una llamada de asistencia utilizando MethodChannel en Android y url_launcher en iOS.
📌 3. Envío de Mensajes de asistencia
Future_sendEmergencyMessage() async { Position position = await Geolocator.getCurrentPosition(); String message = "🚨 asistencia! Mi ubicación: https://www.google.com/maps?q=${position.latitude},${position.longitude}"; if (Platform.isAndroid) { await _sendSMSChannel(message, _smsNumber); await _sendSMSTwilio(message, _whatsappNumber); } else { await _sendSMSTwilio(message, _smsNumber); } await _sendWhatsAppTwilio(message, _whatsappNumber); }
Obtiene la ubicación actual y envía un mensaje con la localización mediante SMS y WhatsApp.
📌 4. Interfaz de Usuario
Scaffold(
appBar: AppBar(
title: Image.asset("assets/images/logo.png", height: 55),
),
body: Center(
child: GestureDetector(
onTap: isButtonDisabled ? null : () {
_makeEmergencyCall();
_sendEmergencyMessage();
},
child: Container(
width: 120,
height: 120,
decoration: BoxDecoration(
color: isButtonDisabled ? Colors.blueGrey : Colors.red,
shape: BoxShape.circle,
),
child: Center(
child: isLoading ? CircularProgressIndicator() : Text("LLAMAR"),
),
),
),
),
)
El botón de asistencia activa la llamada y el envío de ubicación.
🛠 Errores y Soluciones
| Error | Causa | Solucion |
|---|---|---|
| PlatformException en llamadas | Falta configuración en AndroidManifest.xml | <uses-permission android:name="android.permission.CALL_PHONE"/> |
| GeolocationStatus.denied | Permiso de ubicación no concedido | Solicitar permiso manualmente desde Configuración |
| Twilio API Unauthorized | Credenciales incorrectas | Revisar accountSid y authToken |
❓ Preguntas Frecuentes (FAQ)
📜 Fuentes y Créditos
- Flutter - (flutter.dev)
- Geolocator - (pub.dev/packages/geolocator)
- Firebase - (firebase.google.com)
- Twilio API - (twilio.com)
- Permission Handler - (pub.dev/packages/permission_handler)
- Url Launcher - (pub.dev/packages/url_launcher)
Desarrollado por Phixi Labs 🚀
📝 Registro de Cambios (Changelog)
v1.1.000 (27-08-2025)
🔹 Actualización de Call y SMS MethodChannel; funcionaba incorrectamente (Solo Android). 🔹 Actualización de diseño a estilo oscuro, cambio de íconos de apps y logos. 🔹 Textos de la aplicación actualizados para cumplir con las peticiones de las tiendas. 🔹 Corrección de bug al no abrir el Dial (Solo iOS). 🔹 Actualización de la información que obtienen Firebase Crashlytics y Firebase Analytics para recopilación correcta sin errores.
v1.0.000 (BETA) (23-03-2025)
🔹 Implementación de llamada de asistencia con MethodChannel. 🔹 Envío de ubicación a través de SMS y WhatsApp con Twilio API. 🔹 Animación de botón de asistencia. 🔹 Manejo de permisos en Android e iOS. 🔹 Integración con Firebase Crashlytics y Firebase Analytics para manejo de errores y recopiación de datos.