SDK Flutter 0.2.2
Paquete rimasun_flutter para Android e iOS: el mismo modelo que el SDK web.
Instalar
Descargue el paquete SDK Flutter (Mi cuenta → Descargas), verifique su firma y descomprímalo junto a su app. Trae dos carpetas:
rimasun_flutter y terceros/flutter_webrtc (con un parche que evita un cierre de la app en Android al recibir video).
dependencies:
rimasun_flutter:
path: ../rimasun_flutter-0.2.2/rimasun_flutter
dependency_overrides:
flutter_webrtc:
path: ../rimasun_flutter-0.2.2/terceros/flutter_webrtc
Requisitos: Flutter 3.27 o superior, Dart 3.5. El motor livekit_client va fijado en 2.13.1.
Permisos
| Plataforma | Qué agregar |
|---|---|
Android (AndroidManifest.xml) | CAMERA, RECORD_AUDIO, MODIFY_AUDIO_SETTINGS, INTERNET, ACCESS_NETWORK_STATE, BLUETOOTH_CONNECT |
iOS (Info.plist) | NSCameraUsageDescription, NSMicrophoneUsageDescription y, para seguir en segundo plano, UIBackgroundModes → audio, voip |
El SDK pide los permisos recién al conectar, no al abrir la app.
Pantalla lista
import 'package:rimasun_flutter/rimasun_flutter.dart';
// 1) Su servidor pide el token a Rimasun (POST /v1/tokens) y se lo entrega a la app.
final cred = RimasunCredencial.desdeJson(respuestaDeSuServidor);
// 2) Pantalla completa de llamada
Navigator.push(context, MaterialPageRoute(builder: (_) => RimasunPantallaLlamada(
credencial: cred,
titulo: "Dr(a). Ruiz",
subtitulo: "Cita N.º 250",
alTerminar: (duracion) => guardarDuracion(duracion),
)));
| Parámetro | Por defecto | Descripción |
|---|---|---|
credencial | — | RimasunCredencial de la respuesta del servidor. |
titulo, subtitulo, fotoUrl | — | Datos de la otra persona (la foto solo por https). |
conVideo | true | false para voz. |
colorPrincipal | #2A3C58 | Color de la inicial y detalles. |
alTerminar(Duration) | — | Al terminar la llamada. |
claveCifrado | — | Cifrado de extremo a extremo. Ver E2EE. |
permitirInseguro | false | Acepta ws:// fuera de la red local. Solo pruebas. |
RimasunPantallaLlamada.colgarActiva() cuelga desde fuera (p. ej. desde CallKit) y hayLlamadaActiva indica si hay una abierta.
Interfaz propia
final ll = RimasunLlamada()..terminarSiSalenTodos = true;
ll.addListener(() => setState(() {}));
await ll.conectar(cred, conVideo: true);
// ll.estado: RimasunEstado.inactiva | conectando | esperando | enLlamada | reconectando | terminada | error
// ll.videoDe(ll.otro), ll.videoPropio → VideoTrack (VideoTrackRenderer)
// ll.redDe(p): RimasunRed.excelente | buena | debil | sinConexion | desconocida
// ll.alternarMicrofono(), alternarCamara(), cambiarCamara(), alternarAltavoz(), colgar()
// ll.duracion, ll.aviso, ll.error, ll.motivoFin, ll.cifrada
ll.dispose(); // al salir
Credencial
cred.validar() devuelve null o el motivo (formato del token, vencimiento, sala, wss://); cred.valida es su versión booleana.
conectar la valida siempre. toString() no muestra el token.
RimasunLlamada.depuracion = true abre el registro detallado del motor (no en producción). Para que el SDK pueda bajar el registro del motor a warning, active en su app hierarchicalLoggingEnabled = true (paquete logging); si no, se mantiene el nivel de su app.
Rimasun · documentación en español · cambios por versión