Flutter SDK API Reference
Complete API reference for the BaxCloud Flutter SDK
Table of Contents
Installation
Add Dependency
Add to your pubspec.yaml
1dependencies:
2 baxcloud_client:
3 path: ../path/to/baxcloud_clientThen run:
flutter pub getNote: All required dependencies are bundled with the SDK.
iOS Setup
Configure permissions in Info.plist
Add to 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:
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 IDapiKey(String) - Your BaxCloud API key
Example
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 nameoptions.liveType(BaxcloudLiveType) - Type of live sessionoptions.maxParticipants(int?, optional) - Maximum participants
Example
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 nameoptions.participant(BaxcloudUser) - Participant informationoptions.liveType(BaxcloudLiveType) - Type of live session
Example
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
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 connectionStateExample
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
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 recordoptions.filepath(String?, optional) - Custom file path for the recordingoptions.fileType(String?, optional) - Recording file type ('MP4' | 'OGG' | 'WEBM', default: 'MP4')
Example
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
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
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 IDexpiresIn(int?, optional) - URL expiration time in seconds (default: 3600)
Example
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
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
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 backgroundvirtual- Virtual backgroundimage- Image backgroundvideo- 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
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
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
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