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.0

Permissions

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 Flutter

3. 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.