import 'package:cometchat_calls_sdk/cometchat_calls_sdk.dart';
import 'package:flutter/material.dart';
import 'package:share_plus/share_plus.dart';
class CallScreen extends StatefulWidget {
final String sessionId;
final String meetingName;
const CallScreen({
super.key,
required this.sessionId,
required this.meetingName,
});
@override
State<CallScreen> createState() => _CallScreenState();
}
class _CallScreenState extends State<CallScreen> {
Widget? callWidget;
@override
void initState() {
super.initState();
_setupShareButtonListener();
_joinCall();
}
void _setupShareButtonListener() {
CallSession.getInstance()?.addButtonClickListener(
ButtonClickListener(
onShareInviteButtonClicked: () {
_shareInviteLink();
},
),
);
}
void _shareInviteLink() {
final inviteUrl = _generateInviteUrl(widget.sessionId, widget.meetingName);
final shareMessage = "📞 Join my meeting: ${widget.meetingName}\n\n$inviteUrl";
Share.share(
shareMessage,
subject: "Meeting Invite: ${widget.meetingName}",
);
}
String _generateInviteUrl(String sessionId, String meetingName) {
final encodedName = Uri.encodeComponent(meetingName);
return "https://yourapp.com/join?sessionId=$sessionId&name=$encodedName";
}
void _joinCall() {
final sessionSettings = CometChatCalls.SessionSettingsBuilder()
..setTitle(widget.meetingName)
..hideShareInviteButton(false);
CometChatCalls.joinSession(
sessionId: widget.sessionId,
sessionSettings: sessionSettings.build(),
onSuccess: (Widget? widget) {
setState(() => callWidget = widget);
},
onError: (CometChatCallsException e) {
debugPrint("Join failed: ${e.message}");
},
);
}
@override
void dispose() {
CallSession.getInstance()?.removeButtonClickListener();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: callWidget ?? const Center(child: CircularProgressIndicator()),
);
}
}