Overview
This section demonstrates how to start a call session in a Flutter application. Previously known as Direct Calling. Before you begin, we strongly recommend you read the calling setup guide.If you want to implement a complete calling experience with ringing functionality (incoming/outgoing call UI), follow the Ringing guide first. Once the call is accepted, return here to start the call session.
Generate Call Token
A call token is required for secure access to a call session. Each token is unique to a specific session and user combination, ensuring that only authorized users can join the call. You can generate the token just before starting the call, or generate and store it ahead of time based on your use case. Use thegenerateToken() method to create a call token:
Start Call Session
Use thestartSession() method to join a call session. This method requires a call token (generated in the previous step) and a CallSettings object that configures the call UI and behavior.
Call Settings
Configure the call experience using the followingCallSettingsBuilder properties:
Call Listeners
TheCometChatCallsEventsListener provides real-time callbacks for call session events, including participant changes, call state updates, and error conditions.
Each listener requires a unique listenerId string. This ID is used to:
- Prevent duplicate registrations — Re-registering with the same ID replaces the existing listener
- Enable targeted removal — Remove specific listeners without affecting others
Events
End Call Session
Ending a call session properly is essential to release media resources (camera, microphone, network connections) and update call state across all participants. The termination process differs based on whether you’re using the Ringing flow or Session Only flow.Ringing Flow
When using the Ringing flow, you must coordinate between the CometChat Chat SDK and the Calls SDK to properly terminate the call and notify all participants.The Ringing flow requires calling methods from both the Chat SDK (
CometChat.endCall()) and the Calls SDK (CometChatCalls.endSession()) to ensure proper call termination and participant notification.
onCallEndButtonPressed() callback is triggered. You must call CometChat.endCall() inside this callback to properly terminate the call and notify other participants. On success, call CometChat.clearActiveCall() and CometChatCalls.endSession() to release resources.
onCallEnded() callback):
Call CometChat.clearActiveCall() to clear the local call state, then call CometChatCalls.endSession() to release media resources.
Session Only Flow
When using the Session Only flow (direct call without ringing), you only need to call the Calls SDK method to end the session. There’s no need to notify the Chat SDK since no call signaling was involved. CallCometChatCalls.endSession() in the onCallEndButtonPressed() callback to release all media resources and disconnect from the call session.
Methods
These methods are available for performing custom actions during an active call session. Use them to build custom UI controls or implement specific behaviors based on your use case.These methods can only be called when a call session is active.
Switch Camera
Toggles between the front and rear camera during a video call. Useful for allowing users to switch their camera view without leaving the call.Mute Audio
Controls the local audio stream transmission. When muted, other participants cannot hear the local user.true— Mutes the microphone, stops transmitting audiofalse— Unmutes the microphone, resumes audio transmission
Pause Video
Controls the local video stream transmission. When paused, other participants see a frozen frame or avatar instead of live video.true— Pauses the camera, stops transmitting videofalse— Resumes the camera, continues video transmission
Set Audio Mode
Routes the audio output to a specific device. Use this to let users choose between speaker, earpiece, or connected audio devices. Available modes:AudioModes.AUDIO_MODE_SPEAKER— Device speaker (loudspeaker)AudioModes.AUDIO_MODE_EARPIECE— Phone earpieceAudioModes.AUDIO_MODE_BLUETOOTH— Connected Bluetooth deviceAudioModes.AUDIO_MODE_HEADPHONES— Wired headphones
Enter PIP Mode
Enters Picture-in-Picture mode, rendering the call view in a small floating window. This allows users to multitask while staying on the call.Exit PIP Mode
Exits Picture-in-Picture mode and returns the call view to its original full-screen or embedded layout.Switch To Video Call
Upgrades an ongoing audio call to a video call. This enables the camera and starts transmitting video to other participants. The remote participant receives theonCallSwitchedToVideo() callback.
Start Recording
Starts recording the call session. The recording is saved to the CometChat server and can be accessed later. All participants receive theonRecordingToggled() callback when recording starts.
Stop Recording
Stops an ongoing call recording. All participants receive theonRecordingToggled() callback when recording stops.