CometChat Calls SDK v5 — Migration Guide (v4 → v5, Flutter)
Overview
The v5 SDK introduces a new API surface while maintaining backward compatibility with v4 APIs (marked as deprecated). This guide covers the key changes.
Key Changes
| v4 API | v5 API |
|---|---|
CometChatCalls.generateToken(sessionId, authToken) |
CometChatCalls.generateCallToken(sessionId) |
CometChatCalls.startSession(token, callSettings) |
CometChatCalls.joinSession(callToken: token, sessionSettings: settings) |
CometChatCalls.endSession() |
CallSession.getInstance()?.leaveSession() |
CallSettings / CallSettingsBuilder |
SessionSettings / SessionSettingsBuilder |
CometChatCallsEventsListener (single mixin) |
5 focused listeners |
| Auth token passed manually | Auth token managed internally after login() |
Authentication
v4
// Auth token passed to every API call
CometChatCalls.generateToken(sessionId, authToken,
onSuccess: (GenerateToken token) { ... },
onError: (e) { ... },
);
v5
// Login once — auth token managed internally
CometChatCalls.login(uid: "user_uid", authKey: "AUTH_KEY",
onSuccess: (User? user) { ... },
onError: (e) { ... },
);
// Then generate token without passing auth token
CometChatCalls.generateCallToken(sessionId,
onSuccess: (CallToken token) { ... },
onError: (e) { ... },
);
Joining a Session
v4
final callSettings = CallSettingsBuilder()
..listener = myV4Listener
..build();
CometChatCalls.startSession(tokenString, callSettings,
onSuccess: (Widget? widget) { ... },
onError: (e) { ... },
);
v5
final settings = SessionSettingsBuilder()
.setTitle("Meeting")
.startVideoPaused(false)
.build();
CometChatCalls.joinSession(
sessionId: sessionId, // or callToken: token
sessionSettings: settings,
onSuccess: (Widget? widget) {
// Register listeners
final session = CallSession.getInstance();
session?.addSessionStatusListener(myListener);
},
onError: (e) { ... },
);
Event Listeners
v4 (Single Mixin)
class MyListener with CometChatCallsEventsListener {
@override
void onCallEnded() {}
@override
void onCallEndButtonPressed() {}
@override
void onUserJoined(RTCUser user) {}
@override
void onUserLeft(RTCUser user) {}
@override
void onAudioModeChanged(List<AudioMode> devices) {}
// ... all in one class
}
v5 (Focused Listeners)
class MySessionListener implements SessionStatusListeners {
@override
void onSessionJoined() {}
@override
void onSessionLeft() {}
@override
void onConnectionClosed() {}
}
class MyParticipantListener implements ParticipantEventListeners {
@override
void onParticipantJoined(Participant participant) {}
@override
void onParticipantLeft(Participant participant) {}
}
class MyMediaListener implements MediaEventListeners {
@override
void onAudioModeChanged(AudioMode audioMode) {}
}
class MyButtonListener implements ButtonClickListeners {
@override
void onLeaveSessionButtonClicked() {}
}
Session Settings
v4
final settings = CallSettingsBuilder()
..setType("VIDEO")
..build();
v5
final settings = SessionSettingsBuilder()
.setType(SessionType.video)
.setLayout(LayoutType.tile)
.setAudioMode(AudioMode.speaker)
.build();
Ending a Session
v4
CometChatCalls.endSession(
onSuccess: (msg) { ... },
onError: (e) { ... },
);
v5
await CallSession.getInstance()?.leaveSession();
Call Logs
v4
final builder = CallLogRequestBuilder()
..authToken = authToken // manually set
..build();
v5
// Auth token resolved internally after login()
final request = CallLogRequestBuilder().build();
request.fetchNext(
onSuccess: (logs) { ... },
onError: (e) { ... },
);
Backward Compatibility
The v5 SDK includes deprecated v4 APIs that still work:
CometChatCalls.generateToken()— callsgenerateCallTokeninternallyCometChatCalls.startSession()— callsjoinSessioninternallyCometChatCalls.endSession()— callsleaveSessioninternallyCallSettings/CallSettingsBuilder— converts toSessionSettingsCometChatCallsEventsListener— bridged viaV4EventListenerAdapter
These deprecated APIs will be removed in a future release.
Gotchas
- v4 deprecated APIs still work but log deprecation warnings
login()orloginWithAuthToken()must be called before using v5 APIs- v4's
RTCUseris replaced byParticipantin v5 - v4's
GenerateTokenis replaced byCallTokenin v5 - The
listenerproperty onCallSettingsBuilderis deprecated — use focused listeners instead
Sample App Reference
- This sample app uses the v5 API exclusively
- See
lib/screens/call_screen.dartfor v5 patterns