Flutter SDK API Reference

Complete API reference for the BaxCloud Flutter SDK

Installation

Add Dependency

Add to your pubspec.yaml

pubspec.yaml
1dependencies:
2  baxcloud_client:
3    path: ../path/to/baxcloud_client

Then run:

flutter pub get

Note: All required dependencies are bundled with the SDK.

iOS Setup

Configure permissions in Info.plist

Add to ios/Runner/Info.plist:

ios/Runner/Info.plist
1<key>NSCameraUsageDescription</key>
2<string>We need access to your camera for video calls</string>
3<key>NSMicrophoneUsageDescription</key>
4<string>We need access to your microphone for audio calls</string>

Android Setup

Configure permissions in AndroidManifest.xml

Add to android/app/src/main/AndroidManifest.xml:

android/app/src/main/AndroidManifest.xml
1<uses-permission android:name="android.permission.CAMERA" />
2<uses-permission android:name="android.permission.RECORD_AUDIO" />
3<uses-permission android:name="android.permission.INTERNET" />

BaxCloudClient

Constructor

Initialize the BaxCloud client

BaxCloudClient({
  required String projectId,
  required String apiKey,
})

Parameters

  • projectId (String) - Your BaxCloud project ID
  • apiKey (String) - Your BaxCloud API key

Example

client.dart
1import 'package:baxcloud_client/baxcloud_client.dart';
2
3final client = BaxCloudClient(
4  projectId: 'your-project-id',
5  apiKey: 'your-api-key',
6);

Room Management

createRoom

Create a new room

Future<BaxcloudRoomInfo> createRoom(BaxcloudCreateRoomOptions options)

Parameters

  • options.roomName (String) - Unique room name
  • options.liveType (BaxcloudLiveType) - Type of live session
  • options.maxParticipants (int?, optional) - Maximum participants

Example

create-room.dart
1final room = await client.createRoom(
2  BaxcloudCreateRoomOptions(
3    roomName: 'meeting-123',
4    liveType: BaxcloudLiveType.videoConference,
5    maxParticipants: 50,
6  ),
7);
8
9print('Room created: ${room.roomName}');

deleteRoom

Delete a room

Future<void> deleteRoom(String roomName)

Example

await client.deleteRoom('meeting-123');

listRooms

List all rooms in the project

Future<List<BaxcloudRoomInfo>> listRooms()

Example

final rooms = await client.listRooms();
print('Total rooms: ${rooms.length}');

getRoom

Get information about a specific room

Future<BaxcloudRoomInfo> getRoom(String roomName)

Example

final room = await client.getRoom('meeting-123');
print('Room info: ${room}');

getToken

Get an access token for joining a room

Future<BaxcloudTokenResponse> getToken(BaxcloudRoomOptions options)

Parameters

  • options.roomName (String) - Room name
  • options.participant (BaxcloudUser) - Participant information
  • options.liveType (BaxcloudLiveType) - Type of live session

Example

get-token.dart
1final token = await client.getToken(
2  BaxcloudRoomOptions(
3    roomName: 'meeting-123',
4    participant: BaxcloudUser(
5      userId: 'user-1',
6      name: 'Alice',
7      avatarUrl: 'https://example.com/avatar.jpg',
8      isHost: true,
9    ),
10    liveType: BaxcloudLiveType.videoConference,
11  ),
12);
13
14print('Access token: ${token.token}');

Connection Methods

connect

Connect to a room

Future<Room> connect(BaxcloudRoomOptions options)

Example

connect.dart
1final room = await client.connect(
2  BaxcloudRoomOptions(
3    roomName: 'meeting-123',
4    participant: BaxcloudUser(
5      userId: 'user-1',
6      name: 'Alice',
7      isHost: true,
8    ),
9    liveType: BaxcloudLiveType.videoConference,
10  ),
11);
12
13print('Connected to room: ${room.name}');

disconnect

Disconnect from the current room

Future<void> disconnect()

Example

await client.disconnect();
print('Disconnected from room');

connectionState

Stream of connection state changes

Stream<BaxCloudConnectionState> get connectionState

Example

client.connectionState.listen((state) {
  print('Connection state: $state');
});

Media Controls

enableCamera

Future<void> enableCamera()

disableCamera

Future<void> disableCamera()

enableMicrophone

Future<void> enableMicrophone()

disableMicrophone

Future<void> disableMicrophone()

enableScreenShare

Future<void> enableScreenShare()

disableScreenShare

Future<void> disableScreenShare()

Messaging

sendRealtimeMessage

Send a real-time message to the room

Future<void> sendRealtimeMessage(BaxcloudSendRealtimeMessageOptions options)

Example

send-message.dart
1await client.sendRealtimeMessage(
2  BaxcloudSendRealtimeMessageOptions(
3    roomName: 'meeting-123',
4    message: 'Hello everyone!',
5  ),
6);

Recording APIs

startRecording

Start recording a room

Future<BaxcloudRecordingInfo> startRecording(BaxcloudStartRecordingOptions options)

Parameters

  • options.roomName (String) - Room name to record
  • options.filepath (String?, optional) - Custom file path for the recording
  • options.fileType (String?, optional) - Recording file type ('MP4' | 'OGG' | 'WEBM', default: 'MP4')

Example

start-recording.dart
1final recording = await client.startRecording(
2  BaxcloudStartRecordingOptions(
3    roomName: 'my-room',
4    fileType: 'MP4',
5  ),
6);
7
8print('Recording started: ${recording.egressId}');

Note: Recording events (recording.started, recording.completed, recording.failed) are automatically sent to your configured webhooks in the dashboard if webhooks are enabled for your project.

stopRecording

Stop an active recording

Future<Map<String, dynamic>> stopRecording(String egressId)

Example

await client.stopRecording(recording.egressId);
print('Recording stopped');

listActiveRecordings

List all active recordings/egresses

Future<List<BaxcloudRecordingInfo>> listActiveRecordings([String? roomName])

Example

list-active-recordings.dart
1// List all active recordings
2final activeRecordings = await client.listActiveRecordings();
3
4// List active recordings for a specific room
5final roomRecordings = await client.listActiveRecordings('my-room');

listRecordings

List all recordings with pagination support

Future<BaxcloudRecordingListResponse> listRecordings([BaxcloudListRecordingsOptions? options])

Parameters

  • options.status (String?, optional) - Filter by status ('STARTED' | 'COMPLETED' | 'FAILED')
  • options.page (int?, optional) - Page number (default: 1)
  • options.limit (int?, optional) - Items per page (default: 10)

Example

list-recordings.dart
1final recordings = await client.listRecordings(
2  BaxcloudListRecordingsOptions(
3    status: 'COMPLETED',
4    page: 1,
5    limit: 20,
6  ),
7);
8
9print('Recordings: ${recordings.items}');
10print('Total: ${recordings.meta.total}');

getRecording

Get detailed information about a specific recording

Future<BaxcloudRecordingInfo> getRecording(String recordingId)

Example

final recording = await client.getRecording('recording-123');
print('Recording status: ${recording.status}');

getRecordingDownloadUrl

Get a temporary download URL for a recording file

Future<Map<String, dynamic>> getRecordingDownloadUrl(String recordingId, [int? expiresIn])

Parameters

  • recordingId (String) - Recording ID
  • expiresIn (int?, optional) - URL expiration time in seconds (default: 3600)

Example

download-recording.dart
1final result = await client.getRecordingDownloadUrl('recording-123', 7200);
2print('Download URL (expires in 2 hours): ${result['downloadUrl']}');

Event Handlers

Register callbacks to listen for room events.

onUserJoined

void onUserJoined(
  void Function(dynamic) handler
)

onUserLeft

void onUserLeft(
  void Function(dynamic) handler
)

onMessageReceived

void onMessageReceived(
  void Function(BaxcloudRealtimeMessage, dynamic?) handler
)

onMediaStarted

void onMediaStarted(
  void Function(dynamic, dynamic, dynamic) handler
)

onMediaStopped

void onMediaStopped(
  void Function(dynamic, dynamic, dynamic) handler
)

onConnected

void onConnected(
  void Function() handler
)

onDisconnected

void onDisconnected(
  void Function(String?) handler
)

onReconnecting

void onReconnecting(
  void Function() handler
)

onReconnected

void onReconnected(
  void Function() handler
)

Event Handler Example

event-handlers.dart
1import 'package:flutter/material.dart';
2import 'package:baxcloud_client/baxcloud_client.dart';
3
4class MyScreen extends StatefulWidget {
5  
6  _MyScreenState createState() => _MyScreenState();
7}
8
9class _MyScreenState extends State<MyScreen> {
10  late BaxCloudClient client;
11
12  
13  void initState() {
14    super.initState();
15    client = BaxCloudClient(
16      projectId: 'your-project-id',
17      apiKey: 'your-api-key',
18    );
19
20    // Subscribe to events
21    client.onUserJoined((user) {
22      print('User joined: $user');
23    });
24
25    client.onUserLeft((user) {
26      print('User left: $user');
27    });
28
29    client.onMessageReceived((message, participant) {
30      print('Message received: ${message.message}');
31    });
32  }
33
34  
35  Widget build(BuildContext context) {
36    return Scaffold(
37      body: Center(child: Text('My Screen')),
38    );
39  }
40}

BaxCloudRoomController

Overview

Singleton controller for centralized room management

Access the controller via BaxCloudRoomController.instance

Initialization

init-controller.dart
1import 'package:baxcloud_client/baxcloud_client.dart';
2
3class MyApp extends StatefulWidget {
4  
5  _MyAppState createState() => _MyAppState();
6}
7
8class _MyAppState extends State<MyApp> {
9  late BaxCloudClient client;
10  late BaxCloudRoomController controller;
11
12  
13  void initState() {
14    super.initState();
15    client = BaxCloudClient(
16      projectId: 'your-project-id',
17      apiKey: 'your-api-key',
18    );
19    
20    controller = BaxCloudRoomController.instance;
21    controller.initialize(client);
22  }
23
24  
25  Widget build(BuildContext context) {
26    return MaterialApp(home: MyScreen());
27  }
28}

Host/Co-Host Management

isHost

bool isHost()

isCoHost

bool isCoHost([String? userId])

transferHost

Future<void> transferHost(
  String targetUserId
)

Host only

promoteToCoHost

Future<void> promoteToCoHost(
  String userId
)

Host only

demoteFromCoHost

Future<void> demoteFromCoHost(
  String userId
)

Host only

getCoHosts

List<String> getCoHosts()

Participant Management

getParticipants

List<Participant> getParticipants()

getParticipant

Participant? getParticipant(
  String userId
)

kickParticipant

Future<void> kickParticipant(
  String userId,
  [String? reason]
)

Host/Co-host only

pinParticipant

Future<void> pinParticipant(
  String userId
)

unpinParticipant

Future<void> unpinParticipant(
  String userId
)

getPinnedParticipants

List<String> getPinnedParticipants()

spotlightParticipant

Future<void> spotlightParticipant(
  String userId
)

Host/Co-host only

unspotlightParticipant

Future<void> unspotlightParticipant(
  String userId
)

Host/Co-host only

getSpotlightedParticipants

List<String> getSpotlightedParticipants()

Audio/Video Controls

muteMicrophone

Future<void> muteMicrophone()

unmuteMicrophone

Future<void> unmuteMicrophone()

isMicrophoneMuted

bool isMicrophoneMuted()

enableCamera

Future<void> enableCamera()

disableCamera

Future<void> disableCamera()

isCameraEnabled

bool isCameraEnabled()

muteAll

Future<void> muteAll()

Host only

unmuteAll

Future<void> unmuteAll()

Host only

muteParticipant

Future<void> muteParticipant(
  String userId
)

Host/Co-host only

unmuteParticipant

Future<void> unmuteParticipant(
  String userId
)

Host/Co-host only

Screen Sharing

enableScreenShare

Future<void> enableScreenShare()

disableScreenShare

Future<void> disableScreenShare()

isScreenShareEnabled

bool isScreenShareEnabled()

Chat System

sendChatMessage

Future<void> sendChatMessage(
  String message
)

getChatHistory

List<BaxcloudChatMessage> getChatHistory()

clearChatHistory

void clearChatHistory()

startTyping

Future<void> startTyping()

Auto-stops after 3 seconds

stopTyping

Future<void> stopTyping()

getTypingIndicators

List<BaxcloudTypingIndicator> getTypingIndicators()

Invitation System

sendCallInvitation

Future<String> sendCallInvitation(
  BaxcloudInvitationOptions options
)

Returns

Invitation ID

acceptCallInvitation

Future<void> acceptCallInvitation(
  String invitationId
)

declineCallInvitation

Future<void> declineCallInvitation(
  String invitationId
)

cancelCallInvitation

Future<void> cancelCallInvitation(
  String invitationId
)

Raise Hand

raiseHand

Future<void> raiseHand()

lowerHand

Future<void> lowerHand([String? userId])

getRaisedHands

List<BaxcloudRaisedHand> getRaisedHands()

Network Quality

getNetworkQuality

BaxcloudNetworkQuality getNetworkQuality()

getParticipantQuality

BaxcloudNetworkQuality getParticipantQuality(
  String userId
)

Call Management

getCallHistory

List<BaxcloudCallRecord> getCallHistory()

getCall

BaxcloudCallRecord? getCall(
  String callId
)

endCall

Future<void> endCall()

Polling/Q&A

createPoll

Future<String> createPoll(
  String question,
  List<String> options
)

Host/Co-host only. Returns poll ID

respondToPoll

Future<void> respondToPoll(
  String pollId,
  String selectedOption
)

endPoll

Future<void> endPoll(String pollId)

Host/Co-host only

getActivePolls

List<BaxcloudPoll> getActivePolls()

getPoll

BaxcloudPoll? getPoll(String pollId)

Breakout Rooms

createBreakoutRoom

Future<String> createBreakoutRoom(
  String roomName,
  List<String> participantIds
)

Host/Co-host only. Returns room ID

joinBreakoutRoom

Future<void> joinBreakoutRoom(
  String roomId
)

leaveBreakoutRoom

Future<void> leaveBreakoutRoom(
  String roomId
)

getBreakoutRooms

List<BaxcloudBreakoutRoom> getBreakoutRooms()

getBreakoutRoom

BaxcloudBreakoutRoom? getBreakoutRoom(
  String roomId
)

Emoji Reactions

sendEmojiReaction

Future<void> sendEmojiReaction(
  String emoji
)

getRecentEmojiReactions

List<BaxcloudEmojiReaction> getRecentEmojiReactions()

Waiting Room

approveWaitingRoomParticipant

Future<void> approveWaitingRoomParticipant(
  String userId
)

Host/Co-host only

rejectWaitingRoomParticipant

Future<void> rejectWaitingRoomParticipant(
  String userId
)

Host/Co-host only

getWaitingRoomParticipants

List<BaxcloudWaitingRoomParticipant> getWaitingRoomParticipants()

Host/Co-host only

Picture-in-Picture

Note: PIP is not yet implemented for Flutter. This is a placeholder for future implementation.

enablePIP

Future<void> enablePIP()

disablePIP

Future<void> disablePIP()

isPIPEnabled

bool isPIPEnabled()

Background Effects

applyBackgroundEffect

Future<void> applyBackgroundEffect(
  BaxcloudBackgroundEffect effect
)

Effect Types

  • blur - Blur background
  • virtual - Virtual background
  • image - Image background
  • video - Video background

removeBackgroundEffect

Future<void> removeBackgroundEffect()

getCurrentBackgroundEffect

BaxcloudBackgroundEffect? getCurrentBackgroundEffect()

Accessibility

updateAccessibilitySettings

void updateAccessibilitySettings(
  BaxcloudAccessibilitySettings settings
)

getAccessibilitySettings

BaxcloudAccessibilitySettings getAccessibilitySettings()

Type Definitions

BaxcloudLiveType

enum BaxcloudLiveType {
  audioCall,
  videoCall,
  audioConference,
  videoConference,
  liveStreaming,
  webinar,
  screenShare,
  recording,
}

BaxCloudConnectionState

enum BaxCloudConnectionState {
  disconnected,
  connecting,
  connected,
  reconnecting,
  failed,
}

BaxcloudUser

class BaxcloudUser {
  final String userId;
  final String name;
  final String? avatarUrl;
  final bool? isHost;
  final Map<String, dynamic>? metadata;

  BaxcloudUser({
    required this.userId,
    required this.name,
    this.avatarUrl,
    this.isHost,
    this.metadata,
  });
}

BaxcloudRoomOptions

class BaxcloudRoomOptions {
  final String roomName;
  final BaxcloudUser participant;
  final BaxcloudLiveType liveType;
  final Map<String, dynamic>? roomMetadata;
  final bool? canJoinWithNoHost; // Default: true

  BaxcloudRoomOptions({
    required this.roomName,
    required this.participant,
    required this.liveType,
    this.roomMetadata,
    this.canJoinWithNoHost,
  });
}

Platform-Specific Notes

iOS

  • Requires camera and microphone permissions in Info.plist
  • Background audio requires background modes configuration
  • PIP support requires additional native setup (not yet implemented)

Required Permissions

ios/Runner/Info.plist
1<key>NSCameraUsageDescription</key>
2<string>We need access to your camera for video calls</string>
3<key>NSMicrophoneUsageDescription</key>
4<string>We need access to your microphone for audio calls</string>

Android

  • Requires runtime permissions for camera and microphone
  • Handle permission requests in your app
  • PIP support available on Android 8.0+ (not yet implemented)

Required Permissions

android/app/src/main/AndroidManifest.xml
1<uses-permission android:name="android.permission.CAMERA" />
2<uses-permission android:name="android.permission.RECORD_AUDIO" />
3<uses-permission android:name="android.permission.INTERNET" />

Runtime Permission Request Example

request-permissions.dart
1import 'package:permission_handler/permission_handler.dart';
2
3Future<void> requestPermissions() async {
4  final statuses = await [
5    Permission.camera,
6    Permission.microphone,
7  ].request();
8
9  if (statuses[Permission.camera]!.isDenied ||
10      statuses[Permission.microphone]!.isDenied) {
11    print('Permissions denied');
12  }
13}

Web

  • Some features may have limited support
  • Check browser compatibility for media APIs
  • Background effects may not work on all browsers