CoGuestStore
Introduction
Co-guest feature enables real-time interaction between hosts and audience members through a seat-based system. CoGuestStore provides a comprehensive set of APIs to manage the entire co-guest lifecycle.
Important:
Always use the factory method CoGuestStore.create with a valid live room ID to create a CoGuestStore instance. Do not attempt to initialize directly.
Note:
Co-guest state updates are delivered through the coGuestState publisher. Subscribe to it to receive real-time updates about connected users, invitations and applications.
Warning:
If a co-guest request does not receive a response within the specified timeout, an event with NoResponseReason.timeout will be triggered. Always handle timeout scenarios in your UI.
Features
Bidirectional Invitation:Hosts can invite audience members, and audience members can also apply to join
State Management:Real-time tracking of connected users, invitations and applications
Event-Driven Architecture:Provides separate event streams for host and guest roles
Timeout Handling:Built-in timeout mechanism for invitations and applications
Subscribable Data
CoGuestState fields are described below:
Property | Type | Description |
connected | List of users already on seats. | |
invitees | List of users invited by host. | |
applicants | List of users who applied for co-guest received by host. | |
candidates | List of candidate users for co-guest. |
API List
Function | Description |
Create object instance. | |
Host-side event callbacks. | |
Host-side event callbacks. | |
Guest-side event callbacks. | |
Guest-side event callbacks. | |
Guest applies for co-guest. | |
Guest cancels application. | |
Host accepts application. | |
Host rejects application. | |
Host invites guest to co-guest. | |
Host cancels invitation. | |
Guest accepts invitation. | |
Guest rejects invitation. | |
End co-guest session. |
Creating Instance
CoGuestStore.create
Create object instance
Observing State and Events
addHostListener
Add host-side event callback listener
void addHostListener(HostListener listener);
Version
Supported since version 3.5.
Parameters
Parameter | Type | Required | Description |
listener | Required | Listener. |
removeHostListener
Remove host-side event callback listener
void removeHostListener(HostListener listener);
Version
Supported since version 3.5.
Parameters
Parameter | Type | Required | Description |
listener | Required | Listener. |
addGuestListener
Add guest-side event callback listener
void addGuestListener(GuestListener listener);
Version
Supported since version 3.5.
Parameters
Parameter | Type | Required | Description |
listener | Required | Listener. |
removeGuestListener
Remove guest-side event callback listener
void removeGuestListener(GuestListener listener);
Version
Supported since version 3.5.
Parameters
Parameter | Type | Required | Description |
listener | Required | Listener. |
Guest Operations
applyForSeat
Apply to go on seat
Future<CompletionHandler> applyForSeat({required int seatIndex,required int timeout,String? extraInfo,});
Request to join co-guest session as an audience member.
After calling this method, a co-guest request is sent to all hosts in the live room. The request will remain active until:
• Host accepts via acceptApplication
• Host rejects via rejectApplication
• Timeout expires
• You cancel via cancelApplication
Version
Supported since version 3.5.
Notes
Note:
If no host responds within the timeout, {ref2} event with NoResponseReason.timeout will be triggered.
Parameters
Parameter | Type | Required | Description |
seatIndex | int | Required | Seat index, -1 means auto-assign seat. |
timeout | int | Required | Timeout (unit: seconds). |
extraInfo | String? | Required | Extra information. |
cancelApplication
Cancel seat application
Future<CompletionHandler> cancelApplication();
Cancel a previously sent co-guest application. After calling this method, all hosts will be notified of the application cancellation.
Version
Supported since version 3.5.
Notes
Note:
If the application has already been processed by a host, the cancellation may have no effect.
acceptApplication
Accept seat application
Future<CompletionHandler> acceptApplication(String userID);
Version
Supported since version 3.5.
Parameters
Parameter | Type | Required | Description |
userID | String | Required | User ID. |
rejectApplication
Reject seat application
Future<CompletionHandler> rejectApplication(String userID);
Version
Supported since version 3.5.
Parameters
Parameter | Type | Required | Description |
userID | String | Required | User ID. |
Host Operations
inviteToSeat
Invite audience to seat
Future<CompletionHandler> inviteToSeat({required String inviteeID,required int seatIndex,required int timeout,String? extraInfo,});
Version
Supported since version 3.5.
Parameters
Parameter | Type | Required | Description |
inviteeID | String | Required | Invited user ID. |
seatIndex | int | Required | Seat index, -1 means auto-assign seat. |
timeout | int | Required | Timeout (unit: seconds). |
extraInfo | String? | Required | Extra information. |
cancelInvitation
Cancel seat invitation
Future<CompletionHandler> cancelInvitation(String inviteeID);
Version
Supported since version 3.5.
Parameters
Parameter | Type | Required | Description |
inviteeID | String | Required | Invited user ID. |
acceptInvitation
Accept seat invitation
Future<CompletionHandler> acceptInvitation(String inviterID);
Version
Supported since version 3.5.
Parameters
Parameter | Type | Required | Description |
inviterID | String | Required | Inviter user ID. |
rejectInvitation
Reject seat invitation
Future<CompletionHandler> rejectInvitation(String inviterID);
Version
Supported since version 3.5.
Parameters
Parameter | Type | Required | Description |
inviterID | String | Required | Inviter user ID. |
Connection Control
disconnect
End co-guest session
Data Structures
NoResponseReason
Reason for no response to co-guest invitation sent by host or co-guest request initiated by audience
Enum Value | Value | Description |
timeout | 0 | Request timeout. |
alreadySeated | 1 | User already on seat. |
HostListener
Callback events received on host side
Methods
Method | Description |
onGuestApplicationReceived | This callback is triggered when an audience applies for co-guest. |
onGuestApplicationCancelled | This callback is triggered when an audience cancels co-guest application. |
onGuestApplicationProcessedByOtherHost | This callback is triggered when an audience's co-guest application is processed by another host. |
onHostInvitationResponded | This callback is triggered when a co-guest invitation sent by host receives a response from audience. |
onHostInvitationNoResponse | This callback is triggered when a co-guest invitation sent by host receives no response. |
GuestListener
Callback events received on guest side
Methods
Method | Description |
onHostInvitationReceived | This callback is triggered when receiving a co-guest invitation from host. |
onHostInvitationCancelled | This callback is triggered when host cancels co-guest invitation. |
onGuestApplicationResponded | This callback is triggered when audience's co-guest application receives a response from host. |
onGuestApplicationNoResponse | This callback is triggered when audience's co-guest application receives no response. |
onKickedOffSeat | This callback is triggered when audience is kicked off seat by host. |
CoGuestState
Co-guest related state data provided externally by CoGuestStore
Property | Type | Description |
connected | List of users already on seats. | |
invitees | List of users invited by host. | |
applicants | List of users who applied for co-guest received by host. | |
candidates | List of candidate users for co-guest. |
Usage Example
// Create store instancefinal store = CoGuestStore.create('live_room_123');// Define listenerslate final VoidCallback connectedListener = _onConnectedChanged;late final VoidCallback applicantsListener = _onApplicantsChanged;void _onConnectedChanged() {print('Connected users: ${store.coGuestState.connected.value.length}');}void _onApplicantsChanged() {print('Pending applications: ${store.coGuestState.applicants.value.length}');}// Subscribe to state changesstore.coGuestState.connected.addListener(connectedListener);store.coGuestState.applicants.addListener(applicantsListener);// Add host event listener (for hosts)final hostListener = HostListener(onGuestApplicationReceived: (guestUser) {print('Received application from ${guestUser.userName}');// Show accept/reject UI},onHostInvitationResponded: (isAccept, guestUser) {print('Audience ${guestUser.userName} ${isAccept ? "accepted" : "rejected"}');},);store.addHostListener(hostListener);// Host: Accept applicationfinal result = await store.acceptApplication('user_456');if (result.code == 0) {print('Application accepted successfully');}// Unsubscribe when donestore.coGuestState.connected.removeListener(connectedListener);store.coGuestState.applicants.removeListener(applicantsListener);store.removeHostListener(hostListener);