العودة إلى المطوّرين

< حزمة واجهات Flutter />

UTD Audio Room Kit

غرف صوتية مباشرة جاهزة بمقاعد ودردشة فورية وأدوات إشراف.

الإصدار 1.5.0على pub.dev
iOS 11+Android 21+
audio_room_kit.dart
import 'package:utd_audio_room_kit/utd_audio_room_kit.dart';

UTDAudioRoom(
  appId: '<utd-app-id>',
  appKey: '<utd-app-key>',
  userId: 'user123',
  userName: 'John Doe',
  roomId: 'room456',
  roomOwnerId: 'owner789',
);

Drop-in

واجهة كاملة

0

خوادم خلفية

EN · AR

دعم لغوي مدمج

PiP

+ تصغير

< utd_audio_room_kit />

أبرز المزايا

حزمة Flutter متكاملة وقابلة للتخصيص لتجارب الغرف الصوتية المباشرة، مدعومة بـ LiveKit ومحرّك UTD Stream. واجهة غرفة جاهزة بإدارة المقاعد، وطلبات التحدّث، وقوائم الأعضاء، والدردشة الفورية، والتحكم في الوسائط، والتصغير/PiP، وإشراف كامل للمضيف/المشرف — دون الحاجة إلى خادم توكنات في الخلفية.

واجهة غرفة صوتية جاهزة — دون أي كود إضافي

إدارة المقاعد: أخذ، مغادرة، تبديل، قفل، فتح، طرد، كتم، تبديل المقاعد

طابور طلبات التحدّث مع قبول/رفض

قائمة أعضاء بإجراءات المضيف/المشرف (كتم، طرد، دعوة، حظر، ترقية/تخفيض)

دردشة فورية عبر قناة البيانات مع تجميع وإزالة التكرار

تحكم في الميكروفون والسمّاعة مع توجيه يفضّل البلوتوث

إعادة اتصال متدرّجة (مزامنة خفيفة <15 ثانية، مزامنة كاملة <60 ثانية)

تصغير إلى نافذة عائمة وصورة-داخل-صورة على نظام أندرويد

تخصيص السمات ودعم لغوي مدمج (الإنجليزية/العربية)

استبدال كامل للأقسام (الترويسة، الرسائل، عناصر التحكم، الخلفية، المقاعد)

دون خادم توكنات خلفي — تدفّق توكنات قائم على appKey

< utd_audio_room_kit />

ابدأ الآن

1

التثبيت

Terminal
flutter pub add utd_audio_room_kit
2

عرض على pub.dev

غرف صوتية مباشرة جاهزة بمقاعد ودردشة فورية وأدوات إشراف.

< utd_audio_room_kit />

مرجع API

Main widget

The drop-in prebuilt audio-room widget that hosts the full UI and connection lifecycle.

UTDAudioRoomwidget
const UTDAudioRoom({required String appId, required String appKey, required String userId, required String userName, required String roomId, required String roomOwnerId, Set<String> adminIds, UTDAudioRoomConfig config, List<UTDRoomMode> modes, UTDRoomController? controller, ...})

Prebuilt audio-room widget. Mints a token directly from the engine with the publishable appKey (no backend), connects to LiveKit, and renders seats, chat and controls. Self-upgrades admins post-join.

المعاملات

  • appIdStringمطلوب

    UTD Stream Engine app ID.

  • appKeyStringمطلوب

    Publishable app key (no backend); used to mint tokens via X-App-Key. The server secret never ships.

  • userIdStringمطلوب

    Local user identity.

  • userNameStringمطلوب

    Local user display name.

  • roomIdStringمطلوب

    Room name to join.

  • roomOwnerIdStringمطلوب

    Identity of the room owner; the owner joins as host.

  • adminIdsSet<String>القيمة الافتراضية = const {}

    Identities the app treats as admins at join.

  • adminIdsResolverFuture<Set<String>> Function()?القيمة الافتراضية = null

    Async admin-list source; triggers a non-blocking self-upgrade if it lists the local user.

  • adminIdsNowSet<String> Function()?القيمة الافتراضية = null

    Sync admin-list probe used at token time without waiting.

  • layoutModeStringالقيمة الافتراضية = '3'

    Room mode id selecting the seat layout / seat count.

  • configUTDAudioRoomConfigالقيمة الافتراضية = const UTDAudioRoomConfig()

    Behavior, theming and custom-widget configuration.

  • modesList<UTDRoomMode>القيمة الافتراضية = const []

    Custom room modes registered on the controller.

  • controllerUTDRoomController?القيمة الافتراضية = null

    Optional externally-owned controller (e.g. when restoring from minimize).

  • onControllerReadyvoid Function(UTDRoomController)?القيمة الافتراضية = null

    Called once the controller is created/attached.

  • onConnectionChangedvoid Function(bool isConnected)?القيمة الافتراضية = null

    Fired on connect success/failure.

  • onSeatTapvoid Function(int index, SeatState seat)?القيمة الافتراضية = null

    Called when a seat is tapped.

  • onSeatChangedvoid Function(List<SeatState> seats)?القيمة الافتراضية = null

    Called whenever seat state changes.

  • onConnectErrorvoid Function(Object error, StackTrace)?القيمة الافتراضية = null

    Called when the initial connect fails.

Room controller

Top-level controller owning connection, sub-controllers, roles, bans and speaker flows.

UTDRoomControllerconstructor
UTDRoomController()

Creates the controller and its seat, media, chat, minimize and PiP sub-controllers. Usually created internally by UTDAudioRoom.

initApimethod
void initApi({String baseUrl, String tokenBaseUrl, String? appId, required String appKey})

Initializes the engine and token API clients. Must be called before connect/generateToken. Token issuance and in-room ops use different hosts.

المعاملات

  • baseUrlStringالقيمة الافتراضية = UTDApiClient.defaultBaseUrl

    In-room engine host for seat/speaker/ban/role calls.

  • tokenBaseUrlStringالقيمة الافتراضية = UTDApiClient.defaultTokenBaseUrl

    Edge host used for token generation.

  • appIdString?القيمة الافتراضية = null

    Engine app ID.

  • appKeyStringمطلوب

    Publishable app key sent as X-App-Key for minting.

connectmethodasync
Future<void> connect({required String url, required String token, int seatCount = 9, bool enableMicOnJoin = false, bool useSpeaker = true, Map<String,String> userAttributes, String? roomName})

Connects to the LiveKit room with the given url/token, initializes seats, wires data/role/ban/chat-lock handlers, and optionally enables the mic and speaker.

المعاملات

  • urlStringمطلوب

    LiveKit server URL.

  • tokenStringمطلوب

    LiveKit access token.

  • seatCountintالقيمة الافتراضية = 9

    Number of seats to initialize.

  • enableMicOnJoinboolالقيمة الافتراضية = false

    Publish the local mic on connect.

  • useSpeakerboolالقيمة الافتراضية = true

    Prefer Bluetooth/loudspeaker output on join.

  • userAttributesMap<String,String>القيمة الافتراضية = const {}

    Cosmetic LiveKit participant attributes (avatar/frame/etc.).

  • roomNameString?القيمة الافتراضية = null

    Room name used for seat API calls.

القيمة المُرجَعة: Future<void>

generateTokenmethodasync
Future<UTDTokenResponse> generateToken({required String identity, required String roomName, required String roomOwnerId, String role = 'audience', String? name, int? seatCount, String? seatMode, int? hostSeat, String? modeId, ...})

Requests a LiveKit token from the engine and applies the returned per-user bearer to the in-room clients. Throws UTDBannedException on a 403 banned response.

المعاملات

  • identityStringمطلوب

    User identity.

  • roomNameStringمطلوب

    Room name.

  • roomOwnerIdStringمطلوب

    Room owner identity.

  • typeStringالقيمة الافتراضية = 'audio_room'

    Room type.

  • roleStringالقيمة الافتراضية = 'audience'

    Requested role (host/admin/audience).

  • nameString?القيمة الافتراضية = null

    Display name.

  • seatCountint?القيمة الافتراضية = null

    Initial seat count (host only).

  • modeIdString?القيمة الافتراضية = null

    Room mode id (host only).

القيمة المُرجَعة: Future<UTDTokenResponse>

leavemethodasync
Future<void> leave()

Leaves the room: tears down listeners, drains any pending mic publish, disconnects LiveKit, and resets minimize/PiP state.

القيمة المُرجَعة: Future<void>

changeRolemethodasync
Future<UTDRoleChangeResult> changeRole({required String targetIdentity, required String role})

Changes a participant's role (owner-only; server returns 403 otherwise). Optimistically caches the result; throws on REST error.

المعاملات

  • targetIdentityStringمطلوب

    Identity whose role changes.

  • roleStringمطلوب

    New role (host/admin/guest/audience).

القيمة المُرجَعة: Future<UTDRoleChangeResult>

banUsermethodasync
Future<bool> banUser(String identity, {String? reason, int? durationSeconds, bool global = false})

Bans a user. Room-scoped by default; pass global true for a project-wide ban and durationSeconds null for permanent. Returns true on success.

المعاملات

  • identityStringمطلوب

    User to ban.

  • reasonString?القيمة الافتراضية = null

    Optional ban reason.

  • durationSecondsint?القيمة الافتراضية = null

    Ban duration; null = permanent.

  • globalboolالقيمة الافتراضية = false

    True for a project-wide ban.

القيمة المُرجَعة: Future<bool>

lockCommentsmethodasync
Future<bool> lockComments()

Locks room chat so only host/admin may send (host/admin-only). State is confirmed by the server broadcast, not set optimistically.

القيمة المُرجَعة: Future<bool>

requestToSpeakmethodasync
Future<Map<String,dynamic>?> requestToSpeak()

Audience requests to speak (request mode). Returns the API result map, or null on error / when not ready.

القيمة المُرجَعة: Future<Map<String,dynamic>?>

inviteToSpeakmethodasync
Future<Map<String,dynamic>?> inviteToSpeak(String targetIdentity, {int? seatIndex})

Host/admin invites a user to speak, optionally targeting a specific seat. Returns the API result map or null.

المعاملات

  • targetIdentityStringمطلوب

    Identity to invite.

  • seatIndexint?القيمة الافتراضية = null

    Target seat the invitee is seated on if accepted.

القيمة المُرجَعة: Future<Map<String,dynamic>?>

isConnectedgetter
bool get isConnected

True when the room connection state is connected.

القيمة المُرجَعة: bool

isHostOrAdmingetter
bool get isHostOrAdmin

Whether the local participant's role is host or admin.

القيمة المُرجَعة: bool

participantsStreamgetterasync
Stream<List<UTDParticipant>> get participantsStream

Stream of all room participants, emitting on join/leave/attribute/metadata changes.

القيمة المُرجَعة: Stream<List<UTDParticipant>>

roleChangeStreamgetterasync
Stream<UTDRoleChangeEvent> get roleChangeStream

Stream of role changes for all participants (promotions, demotions, engine auto-corrections).

القيمة المُرجَعة: Stream<UTDRoleChangeEvent>

activeSpeakersproperty
final ValueNotifier<Set<String>> activeSpeakers

Reactive set of identities currently speaking, polled from LiveKit every 300ms.

القيمة المُرجَعة: ValueNotifier<Set<String>>

commentsLockedproperty
final ValueNotifier<bool> commentsLocked

Reactive whether room chat is currently locked (server-driven; never set optimistically).

القيمة المُرجَعة: ValueNotifier<bool>

onBannedcallback
void Function(UTDBanNotice notice)? onBanned

Fired once when the local user is banned from any source (data message, removal, or token 403). Wired internally by UTDAudioRoom.

القيمة المُرجَعة: void Function(UTDBanNotice)?

disposemethod
void dispose()

Releases all resources: timers, subscriptions, notifiers, sub-controllers and API clients.

Seat & stage control

Seat state management; all mutations go through the REST API and apply from server _seat_update messages.

UTDSeatControllerclass
UTDSeatController(UTDRoomManager roomManager)

Manages reactive seat state. Mutations call the REST API; local state updates only from _seat_update data messages or room _seats metadata.

takeSeatmethodasync
Future<bool> takeSeat(int index, String userId)

Requests microphone (and Bluetooth on Android) permissions then takes the seat at index via the API. State arrives via _seat_update.

المعاملات

  • indexintمطلوب

    Target seat index.

  • userIdStringمطلوب

    Identity taking the seat.

القيمة المُرجَعة: Future<bool>

leaveSeatmethodasync
Future<bool> leaveSeat(String userId)

Leaves the user's current seat via the API.

المعاملات

  • userIdStringمطلوب

    Identity leaving the seat.

القيمة المُرجَعة: Future<bool>

moveSeatmethodasync
Future<bool> moveSeat(String userId, int targetSeat)

Atomically moves the user to another seat via the API.

المعاملات

  • userIdStringمطلوب

    Identity to move.

  • targetSeatintمطلوب

    Destination seat index.

القيمة المُرجَعة: Future<bool>

lockSeatmethodasync
Future<bool> lockSeat(int index, {required String identity})

Admin locks the seat at index (host/admin). State arrives via _seat_update.

المعاملات

  • indexintمطلوب

    Seat to lock.

  • identityStringمطلوب

    Acting host/admin identity.

القيمة المُرجَعة: Future<bool>

kickFromSeatmethodasync
Future<bool> kickFromSeat(int index, {required String identity})

Removes the occupant from the seat at index (host/admin only).

المعاملات

  • indexintمطلوب

    Seat to vacate.

  • identityStringمطلوب

    Acting host/admin identity.

القيمة المُرجَعة: Future<bool>

setupSeatsmethodasync
Future<bool> setupSeats({required String identity, required int seatCount, required String seatMode, String? modeId})

Changes seat configuration mid-room (count/mode/modeId) (host/admin only).

المعاملات

  • identityStringمطلوب

    Acting host/admin identity.

  • seatCountintمطلوب

    New seat count.

  • seatModeStringمطلوب

    New seat mode ('free'/'request').

  • modeIdString?القيمة الافتراضية = null

    New room mode id.

القيمة المُرجَعة: Future<bool>

seatsproperty
final ValueNotifier<List<SeatState>> seats

Reactive list of all seat states.

القيمة المُرجَعة: ValueNotifier<List<SeatState>>

pendingRequestsproperty
final ValueNotifier<List<SpeakerRequest>> pendingRequests

Reactive list of pending speaker requests (for host/admin UI).

القيمة المُرجَعة: ValueNotifier<List<SpeakerRequest>>

getSeatIndexByUserIdmethod
int getSeatIndexByUserId(String userId)

Returns the seat index occupied by a user, or -1 if not seated.

المعاملات

  • userIdStringمطلوب

    Identity to look up.

القيمة المُرجَعة: int

isSeatAvailablemethod
bool isSeatAvailable(int index, {String? userId})

Whether the seat at index is empty, unlocked and not reserved for someone else.

المعاملات

  • indexintمطلوب

    Seat index to test.

  • userIdString?القيمة الافتراضية = null

    User to evaluate reservations against.

القيمة المُرجَعة: bool

Media control

Mic, camera, speaker and Bluetooth-routing controls, kept in sync with server/host-side mutes.

UTDMediaControllerclass
UTDMediaController(UTDRoomManager roomManager)

Controls mic, camera and speaker state and listens to LiveKit mute/permission events to keep reactive state authoritative.

setMicrophoneEnabledmethodasync
Future<void> setMicrophoneEnabled(bool enabled)

Enables/disables the local mic. Refuses to publish on a non-connected room to avoid the addTransceiver-on-disposed-track crash.

المعاملات

  • enabledboolمطلوب

    Target mic state.

القيمة المُرجَعة: Future<void>

toggleMicrophonemethodasync
Future<void> toggleMicrophone()

Toggles the local microphone on/off.

القيمة المُرجَعة: Future<void>

applyBluetoothAudioRoutingmethodasync
Future<void> applyBluetoothAudioRouting()

Re-applies the Android communication audio config with forceHandleAudioRouting so Bluetooth routing works after connect/publish; iOS uses the AVAudioSession path.

القيمة المُرجَعة: Future<void>

setSpeakerOnmethodasync
Future<void> setSpeakerOn(bool on)

Routes audio to the loudspeaker (true) or earpiece (false).

المعاملات

  • onboolمطلوب

    Speakerphone on/off.

القيمة المُرجَعة: Future<void>

muteAllRemoteAudiomethod
void muteAllRemoteAudio(bool mute)

Mutes/unmutes playback of all remote participants' audio (and enforces it on late-subscribed tracks).

المعاملات

  • muteboolمطلوب

    Whether to mute remote audio.

isMicEnabledproperty
final ValueNotifier<bool> isMicEnabled

Reactive local mic state, kept in sync with LiveKit track mute/unmute events.

القيمة المُرجَعة: ValueNotifier<bool>

canPublishproperty
final ValueNotifier<bool> canPublish

Reactive whether the local participant may publish mic/camera; flips false on demotion.

القيمة المُرجَعة: ValueNotifier<bool>

Chat

Room chat send/receive with comment-lock gating and a bounded message buffer.

UTDChatControllerclass
UTDChatController(UTDRoomManager roomManager)

Sends and receives room chat over the data channel, enforcing the comment-lock gate and capping retained messages at 300.

sendMessagemethodasync
Future<void> sendMessage(String text, {Map<String,dynamic>? userData})

Sends a chat message (trimmed, non-empty). Refused when comments are locked and the local user is not host/admin.

المعاملات

  • textStringمطلوب

    Message body.

  • userDataMap<String,dynamic>?القيمة الافتراضية = null

    Optional extra payload attached to the message.

القيمة المُرجَعة: Future<void>

addDisplayMessagemethod
void addDisplayMessage(UTDChatMessage message)

Appends a message to the local list without sending it (used for system lines).

المعاملات

  • messageUTDChatMessageمطلوب

    Message to display locally.

clearMessagesmethod
void clearMessages()

Clears the local message list.

messagesproperty
final ValueNotifier<List<UTDChatMessage>> messages

Reactive list of chat messages (bounded to the most recent 300).

القيمة المُرجَعة: ValueNotifier<List<UTDChatMessage>>

Configuration & theming

Behavior config, color tokens, localized strings and minimize/PiP options.

UTDAudioRoomConfigconstructor
const UTDAudioRoomConfig({bool showControlsBar = true, bool turnOnMicrophoneWhenJoining = false, bool useSpeakerWhenJoining = true, int hostSeatIndex = 0, UTDRoomTheme theme, UTDRoomStrings? strings, bool enableMinimize = true, Widget? headerWidget, ...})

Configures room behavior, theme, strings and custom section/seat builders. Replaces the prebuilt config.

المعاملات

  • showControlsBarboolالقيمة الافتراضية = true

    Show the default controls bar.

  • showSeatNamesboolالقيمة الافتراضية = true

    Show occupant names under seats.

  • enableMinimizeboolالقيمة الافتراضية = true

    Allow minimizing the room to a floating overlay.

  • turnOnMicrophoneWhenJoiningboolالقيمة الافتراضية = false

    Publish the mic on join.

  • useSpeakerWhenJoiningboolالقيمة الافتراضية = true

    Prefer speaker/Bluetooth output on join.

  • hostSeatIndexintالقيمة الافتراضية = 0

    Seat index reserved for the host.

  • themeUTDRoomThemeالقيمة الافتراضية = const UTDRoomTheme()

    Color tokens for the default UI.

  • stringsUTDRoomStrings?القيمة الافتراضية = null

    Localized strings; null = English defaults.

  • autoHostMicboolالقيمة الافتراضية = true

    Auto-enable the host's mic even if join-mic is false.

  • autoSeatHostboolالقيمة الافتراضية = true

    Auto-seat the host on hostSeatIndex if empty.

  • headerWidgetWidget?القيمة الافتراضية = null

    Custom header replacing the default.

  • seatBuilderWidget Function(SeatState, double)?القيمة الافتراضية = null

    Custom builder for a seat slot.

  • avatarBuilderWidget Function(String,double,Map<String,String>,bool,int,String)?القيمة الافتراضية = null

    Custom occupant avatar builder.

  • userInRoomAttributesMap<String,String>القيمة الافتراضية = const {}

    Cosmetic attributes published to other participants.

UTDAudioRoomConfig.hostconstructor
factory UTDAudioRoomConfig.host()

Factory preset for a host (microphone on when joining).

resolveStringsmethod
UTDRoomStrings resolveStrings()

Returns the configured strings or the English defaults.

القيمة المُرجَعة: UTDRoomStrings

UTDRoomThemeconstructor
const UTDRoomTheme({Color background, Color surface, Color onSurface, Color primary, Color danger, Color seatRingSpeaking, Color badgeHost, Color badgeAdmin, Color badgeGuest, Color sheetBackground, Color bubbleBackground, ...})

Color tokens for the built-in default UI. Every field has a dark-room default, so const UTDRoomTheme() is a complete theme.

المعاملات

  • backgroundColorالقيمة الافتراضية = Color(0xFF14121C)

    Full-screen room background.

  • primaryColorالقيمة الافتراضية = Color(0xFF6C5CE7)

    Accent / call-to-action color.

  • dangerColorالقيمة الافتراضية = Color(0xFFE74C3C)

    Destructive color (leave/kick/ban).

  • seatRingSpeakingColorالقيمة الافتراضية = Color(0xFF2ECC71)

    Ring around an actively-speaking seat.

  • badgeHostColorالقيمة الافتراضية = Color(0xFFFFA726)

    Host role badge color.

  • badgeAdminColorالقيمة الافتراضية = Color(0xFF448AFF)

    Admin role badge color.

copyWithmethod
UTDRoomTheme copyWith({Color? background, Color? primary, Color? danger, ...})

Returns a copy of the theme overriding only the supplied color tokens.

القيمة المُرجَعة: UTDRoomTheme

UTDRoomStrings.enconstructor
factory UTDRoomStrings.en()

English defaults for all built-in UI labels (seat actions, requests, host panels, comment-lock, templated lines).

UTDRoomStrings.arconstructor
factory UTDRoomStrings.ar()

Arabic defaults for all built-in UI labels.

UTDMinimizeConfigconstructor
const UTDMinimizeConfig({VoidCallback? onClose, MiniOverlayBuilder? overlayBuilder, double overlayWidth = 120, double overlayHeight = 120, bool enableOSPip = false, int pipAspectWidth = 1, int pipAspectHeight = 1, ...})

Configures the minimize floating overlay and optional Android OS-level Picture-in-Picture (enableOSPip).

المعاملات

  • onCloseVoidCallback?القيمة الافتراضية = null

    Called when the room is closed from the overlay.

  • overlayBuilderMiniOverlayBuilder?القيمة الافتراضية = null

    Custom floating-overlay builder.

  • enableOSPipboolالقيمة الافتراضية = false

    Enable Android 12+ system PiP in addition to the overlay.

  • pipAspectWidthintالقيمة الافتراضية = 1

    PiP aspect ratio numerator.

  • pipAspectHeightintالقيمة الافتراضية = 1

    PiP aspect ratio denominator.

Models & enums

Data models for seats, room modes, chat and connection state.

SeatStateclass
const SeatState({required int index, String? occupantUserId, bool isLocked = false, bool isMuted = false, String? reservedFor, Map<String,String> attributes})

Immutable (Equatable) state of a single seat: index, occupant, lock/mute flags, reservation and occupant attributes.

المعاملات

  • indexintمطلوب

    Seat index (0 = host seat).

  • occupantUserIdString?القيمة الافتراضية = null

    Occupant identity; null = empty.

  • isLockedboolالقيمة الافتراضية = false

    Whether the seat is admin-locked.

  • isMutedboolالقيمة الافتراضية = false

    Whether the occupant's mic is muted.

  • reservedForString?القيمة الافتراضية = null

    Identity this seat is reserved for.

  • attributesMap<String,String>القيمة الافتراضية = const {}

    Occupant cosmetic attributes (avatar, frame, etc.).

SpeakerRequestclass
const SpeakerRequest({required int id, required String identity, String? createdAt})

A pending request to speak: id, requester identity and createdAt timestamp.

المعاملات

  • idintمطلوب

    Request id.

  • identityStringمطلوب

    Requesting identity.

  • createdAtString?القيمة الافتراضية = null

    Creation timestamp.

RoomSeatStateclass
const RoomSeatState({required int count, required String mode, String? modeId, required List<SeatState> seats, required List<SpeakerRequest> requests})

Full seat snapshot from the backend _seats namespace: count, mode, modeId, seats and pending requests.

المعاملات

  • countintمطلوب

    Seat count.

  • modeStringمطلوب

    Seat mode ('free'/'request').

  • modeIdString?القيمة الافتراضية = null

    Room mode id.

  • seatsList<SeatState>مطلوب

    Per-seat states.

  • requestsList<SpeakerRequest>مطلوب

    Pending speaker requests.

UTDRoomModeclass
const UTDRoomMode({required String id, required int seatCount, required List<List<int>> rows, double? seatSize, UTDSeatContainerBuilder? containerBuilder, UTDBackgroundBuilder? backgroundBuilder, String? displayName})

Defines a seat layout mode: id, seat count, row arrangement and optional custom container/background builders. Identity is its id.

المعاملات

  • idStringمطلوب

    Unique mode id (e.g. '3').

  • seatCountintمطلوب

    Number of seats.

  • rowsList<List<int>>مطلوب

    Seat-index layout per row.

  • seatSizedouble?القيمة الافتراضية = null

    Explicit seat size override.

  • containerBuilderUTDSeatContainerBuilder?القيمة الافتراضية = null

    Custom seat-grid container builder.

  • backgroundBuilderUTDBackgroundBuilder?القيمة الافتراضية = null

    Mode-specific background builder.

computeSeatSizemethod
double computeSeatSize(double screenWidth)

Single source of truth for the seat slot size in logical px, scaled sub-linearly (sqrt) with screen width and clamped to 52–120.

المعاملات

  • screenWidthdoubleمطلوب

    Available screen width.

القيمة المُرجَعة: double

UTDRoomMode.defaultModefield
static const UTDRoomMode defaultMode

Built-in default mode: id '3', 9 seats in a 1-4-4 layout.

القيمة المُرجَعة: UTDRoomMode

UTDChatMessageclass
UTDChatMessage({required String senderUserId, required String senderName, required String text, required DateTime timestamp, Map<String,dynamic> userData, String? messageID})

A chat message with sender, text, timestamp, arbitrary userData and an auto-generated messageID. JSON-serializable.

المعاملات

  • senderUserIdStringمطلوب

    Sender identity.

  • senderNameStringمطلوب

    Sender display name.

  • textStringمطلوب

    Message body.

  • timestampDateTimeمطلوب

    Message time.

  • userDataMap<String,dynamic>القيمة الافتراضية = const {}

    Extra payload (e.g. system-line markers).

  • messageIDString?القيمة الافتراضية = null

    Message id; auto-generated when omitted.

UTDConnectionStateenum
enum UTDConnectionState { disconnected, connecting, connected, reconnecting, error }

Room connection state: disconnected, connecting, connected, reconnecting, error.

القيمة المُرجَعة: UTDConnectionState

جاهز تبني مع UTD؟

أنشئ حسابك، اشحن محفظتك الأم، وشغّل الخدمات التي تحتاجها.