SDK Flutter
Ajoutez les appels audio et vidéo à votre application Flutter (iOS, Android, web). Même principe que sur le web : votre serveur émet un jeton, votre app rejoint la salle.
Le flux
Votre serveur crée la salle et émet le jeton avec@lunionlab/meet-server-sdk (voir « Jetons & connexion client »). Votre app Flutter reçoit url, room et token, puis rejoint avec LunionRoom.1. Installer le SDK
pubspec.yaml
dependencies: lunionmeet_flutter: ^0.1.0Permissions
Caméra et micro doivent être déclarés sur chaque plateforme.
android/app/src/main/AndroidManifest.xml
<uses-permission android:name="android.permission.CAMERA" /><uses-permission android:name="android.permission.RECORD_AUDIO" /><uses-permission android:name="android.permission.INTERNET" />ios/Runner/Info.plist
<key>NSCameraUsageDescription</key><string>Pour les appels vidéo</string><key>NSMicrophoneUsageDescription</key><string>Pour les appels audio</string>2. Récupérer un jeton (côté serveur)
Comme pour le web, le jeton est émis par votre backend. Ne mettez jamais votre clé d'API dans l'app mobile.
server.ts
import { RoomServiceClient } from "@lunionlab/meet-server-sdk"; const rooms = new RoomServiceClient( "https://meet.lunion-lab.com/api/v1", process.env.LUNION_API_KEY!,); const room = await rooms.createRoom("Réunion produit");const access = await rooms.createToken(room.slug, "user-42", { name: "Awa" });// → renvoyez access.url, access.room, access.token à votre app Flutter3. Rejoindre la salle
LunionRoom est un ChangeNotifier: écoutez-le pour rafraîchir l'interface. Il gère la connexion, la caméra/micro et l'abonnement aux participants.
call_screen.dart
import 'package:flutter/material.dart';import 'package:lunionmeet_flutter/lunionmeet_flutter.dart'; class CallScreen extends StatefulWidget { const CallScreen({super.key, required this.url, required this.room, required this.token}); final String url, room, token; @override State<CallScreen> createState() => _CallScreenState();} class _CallScreenState extends State<CallScreen> { late final LunionRoom _room = LunionRoom( sfuUrl: widget.url, room: widget.room, name: 'Awa', token: widget.token, ); @override void initState() { super.initState(); _room.connect(); } @override void dispose() { _room.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return ListenableBuilder( listenable: _room, builder: (context, _) => GridView.count( crossAxisCount: 2, children: [ LunionVideoView(stream: _room.localStream, mirror: true), for (final p in _room.participants) LunionVideoView(stream: p.stream), ], ), ); }}Contrôles
room.toggleMic()/room.toggleCamera()— couper/activer.room.micEnabled/room.cameraEnabled— état courant.room.sendChat("…")— message à la salle.room.leave()— quitter et libérer la caméra/micro.
Même protocole que le web
lunionmeet_flutter parle exactement le même protocole que @lunionlab/meet-client-js et @lunionlab/meet-react. Web et mobile peuvent se rejoindre dans la même salle.