diff --git a/packages/hms_room_kit/lib/src/common/constants.dart b/packages/hms_room_kit/lib/src/common/constants.dart index 8e7830968..ebd617396 100644 --- a/packages/hms_room_kit/lib/src/common/constants.dart +++ b/packages/hms_room_kit/lib/src/common/constants.dart @@ -9,7 +9,10 @@ class Constant { "https://public.app.100ms.live/meeting/xvm-wxwo-gbl"; /// [Constant.roomCode] is the meeting code that will be used - static String roomCode = ""; + static String? roomCode = ""; + + ///[Constant.authToken] is auth token to join the room + static String? authToken = ""; /// [Constant.streamingUrl] is the streaming url that will be used static String streamingUrl = ""; diff --git a/packages/hms_room_kit/lib/src/hms_prebuilt.dart b/packages/hms_room_kit/lib/src/hms_prebuilt.dart index 751c81390..60c274060 100644 --- a/packages/hms_room_kit/lib/src/hms_prebuilt.dart +++ b/packages/hms_room_kit/lib/src/hms_prebuilt.dart @@ -15,7 +15,10 @@ class HMSPrebuilt extends StatelessWidget { /// /// Example: For the public Room: https://public.app.100ms.live/meeting/xvm-wxwo-gbl /// The room code is: xvm-wxwo-gbl - final String roomCode; + final String? roomCode; + + ///[token]: The auth token to join the room + final String? authToken; ///The options for the prebuilt ///For more details checkout the [HMSPrebuiltOptions] class @@ -28,8 +31,17 @@ class HMSPrebuilt extends StatelessWidget { final Function? onLeave; ///The key for the widget - const HMSPrebuilt( - {super.key, required this.roomCode, this.options, this.onLeave}); + HMSPrebuilt( + {super.key, + required this.roomCode, + this.options, + this.onLeave, + this.authToken}) { + if (roomCode == null && authToken == null) { + throw ArgumentError.notNull( + "At least one parameter roomCode or authToken must be provided."); + } + } ///Builds the widget ///Returns a [ScreenController] widget @@ -45,6 +57,7 @@ class HMSPrebuilt extends StatelessWidget { Widget build(BuildContext context) { return ScreenController( roomCode: roomCode, + authToken: authToken, options: options, onLeave: onLeave, ); diff --git a/packages/hms_room_kit/lib/src/meeting/meeting_page.dart b/packages/hms_room_kit/lib/src/meeting/meeting_page.dart index 0f62f54d1..89b1f5cca 100644 --- a/packages/hms_room_kit/lib/src/meeting/meeting_page.dart +++ b/packages/hms_room_kit/lib/src/meeting/meeting_page.dart @@ -28,18 +28,13 @@ import 'package:hms_room_kit/src/widgets/common_widgets/hms_left_room_screen.dar ///[MeetingPage] is the main page of the meeting ///It takes the following parameters: -///[meetingLink] is the link of the meeting ///[isRoomMute] is the flag to mute the room class MeetingPage extends StatefulWidget { - final String meetingLink; final bool isRoomMute; final HMSAudioDevice currentAudioDeviceMode; const MeetingPage( - {Key? key, - required this.meetingLink, - this.isRoomMute = true, - required this.currentAudioDeviceMode}) + {Key? key, this.isRoomMute = true, required this.currentAudioDeviceMode}) : super(key: key); @override diff --git a/packages/hms_room_kit/lib/src/meeting/meeting_store.dart b/packages/hms_room_kit/lib/src/meeting/meeting_store.dart index 81f7817fb..8218a2d69 100644 --- a/packages/hms_room_kit/lib/src/meeting/meeting_store.dart +++ b/packages/hms_room_kit/lib/src/meeting/meeting_store.dart @@ -153,7 +153,6 @@ class MeetingStore extends ChangeNotifier bool isMessageInfoShown = true; - String meetingUrl = ""; bool isAudioShareStarted = false; List availableAudioOutputDevices = []; @@ -263,17 +262,22 @@ class MeetingStore extends ChangeNotifier ///List of bottom sheets currently open List bottomSheets = []; - Future join(String userName, String roomCode, - {HMSConfig? roomConfig}) async { + Future join(String userName, {HMSConfig? roomConfig}) async { //If roomConfig is null then only we call the methods to get the authToken //If we are joining the room from preview we already have authToken so we don't //need to call the getAuthTokenByRoomCode method if (roomConfig == null) { //We use this to get the auth token from room code - dynamic tokenData = await _hmsSDKInteractor.getAuthTokenByRoomCode( - userId: Constant.prebuiltOptions?.userId, - roomCode: Constant.roomCode, - endPoint: Constant.tokenEndPoint); + dynamic tokenData; + + if (Constant.roomCode != null) { + await _hmsSDKInteractor.getAuthTokenByRoomCode( + userId: Constant.prebuiltOptions?.userId, + roomCode: Constant.roomCode!, + endPoint: Constant.tokenEndPoint); + } else { + tokenData = Constant.authToken; + } ///If the tokenData is String then we set the authToken in the roomConfig ///and then we join the room @@ -300,7 +304,6 @@ class MeetingStore extends ChangeNotifier setMeetingModeUsingLayoutApi(); _hmsSDKInteractor.join(config: roomConfig); setRecipientSelectorValue(); - meetingUrl = roomCode; return null; } diff --git a/packages/hms_room_kit/lib/src/meeting_screen_controller.dart b/packages/hms_room_kit/lib/src/meeting_screen_controller.dart index 490e4565e..26a2ae744 100644 --- a/packages/hms_room_kit/lib/src/meeting_screen_controller.dart +++ b/packages/hms_room_kit/lib/src/meeting_screen_controller.dart @@ -14,9 +14,6 @@ import 'package:hms_room_kit/src/meeting/meeting_store.dart'; ///[MeetingScreenController] is the controller for the meeting screen ///It is used to join the room class MeetingScreenController extends StatefulWidget { - ///[roomCode] is the room code of the room to join - final String roomCode; - ///[user] is the name of the user joining the room final String user; @@ -48,7 +45,6 @@ class MeetingScreenController extends StatefulWidget { const MeetingScreenController( {Key? key, - required this.roomCode, required this.user, required this.localPeerNetworkQuality, this.isRoomMute = false, @@ -97,7 +93,6 @@ class _MeetingScreenControllerState extends State { value: _hlsPlayerStore, child: const HLSViewerPage()); } return MeetingPage( - meetingLink: widget.roomCode, isRoomMute: widget.isRoomMute, currentAudioDeviceMode: widget.currentAudioDeviceMode, ); diff --git a/packages/hms_room_kit/lib/src/preview/preview_page.dart b/packages/hms_room_kit/lib/src/preview/preview_page.dart index 3215c8e03..0336c560d 100644 --- a/packages/hms_room_kit/lib/src/preview/preview_page.dart +++ b/packages/hms_room_kit/lib/src/preview/preview_page.dart @@ -27,14 +27,9 @@ import 'package:hms_room_kit/src/meeting/meeting_store.dart'; ///This renders the Preview Screen class PreviewPage extends StatefulWidget { final String name; - final String roomCode; final HMSPrebuiltOptions? options; - const PreviewPage( - {super.key, - required this.name, - required this.roomCode, - required this.options}); + const PreviewPage({super.key, required this.name, required this.options}); @override State createState() => _PreviewPageState(); } @@ -77,8 +72,7 @@ class _PreviewPageState extends State { _setMeetingStore(previewStore); /// We join the room here - HMSException? ans = await _meetingStore.join( - nameController.text.trim(), Constant.roomCode); + HMSException? ans = await _meetingStore.join(nameController.text.trim()); ///If the room join fails we show the error dialog if (ans != null && mounted) { @@ -149,17 +143,21 @@ class _PreviewPageState extends State { previewStore.isMeetingJoined = false, previewStore.hmsSDKInteractor.leave(), HMSThemeColors.resetLayoutColors(), - Navigator.pushReplacement( - context, - CupertinoPageRoute( - builder: (_) => ScreenController( - roomCode: Constant.roomCode, - options: widget.options, - ))), + navigateBack() } }); } + void navigateBack() { + Navigator.pushReplacement( + context, + CupertinoPageRoute( + builder: (_) => ScreenController( + roomCode: Constant.roomCode, + options: widget.options, + ))); + } + @override Widget build(BuildContext context) { var size = MediaQuery.of(context).size; @@ -188,7 +186,6 @@ class _PreviewPageState extends State { value: _meetingStore, child: MeetingScreenController( role: previewStore.peer?.role, - roomCode: Constant.roomCode, localPeerNetworkQuality: null, user: nameController.text, isRoomMute: previewStore.isRoomMute, diff --git a/packages/hms_room_kit/lib/src/preview/preview_permissions.dart b/packages/hms_room_kit/lib/src/preview/preview_permissions.dart index f358e79f9..2c1b25221 100644 --- a/packages/hms_room_kit/lib/src/preview/preview_permissions.dart +++ b/packages/hms_room_kit/lib/src/preview/preview_permissions.dart @@ -15,15 +15,10 @@ import 'package:hms_room_kit/src/widgets/hms_buttons/hms_back_button.dart'; ///This renders the preview permissions screen class PreviewPermissions extends StatefulWidget { - final String roomCode; final HMSPrebuiltOptions? options; final void Function() callback; - const PreviewPermissions( - {super.key, - required this.roomCode, - this.options, - required this.callback}); + const PreviewPermissions({super.key, this.options, required this.callback}); @override State createState() => _PreviewPermissionsState(); diff --git a/packages/hms_room_kit/lib/src/preview/preview_store.dart b/packages/hms_room_kit/lib/src/preview/preview_store.dart index fdacdf39b..a839e690b 100644 --- a/packages/hms_room_kit/lib/src/preview/preview_store.dart +++ b/packages/hms_room_kit/lib/src/preview/preview_store.dart @@ -45,8 +45,6 @@ class PreviewStore extends ChangeNotifier int? networkQuality; - String meetingUrl = ""; - bool isRoomMute = false; List roles = []; @@ -108,13 +106,18 @@ class PreviewStore extends ChangeNotifier notifyListeners(); } - Future startPreview( - {required String userName, required String roomCode}) async { + Future startPreview({required String userName}) async { //We use this to get the auth token from room code - dynamic tokenData = await hmsSDKInteractor.getAuthTokenByRoomCode( - userId: Constant.prebuiltOptions?.userId, - roomCode: roomCode, - endPoint: Constant.tokenEndPoint); + + dynamic tokenData; + if (Constant.roomCode != null) { + tokenData = await hmsSDKInteractor.getAuthTokenByRoomCode( + userId: Constant.prebuiltOptions?.userId, + roomCode: Constant.roomCode!, + endPoint: Constant.tokenEndPoint); + } else { + tokenData = Constant.authToken; + } if ((tokenData is String?) && tokenData != null) { roomConfig = HMSConfig( @@ -133,7 +136,6 @@ class PreviewStore extends ChangeNotifier Constant.webRTCLogLevel, Constant.sdkLogLevel); hmsSDKInteractor.addPreviewListener(this); hmsSDKInteractor.preview(config: roomConfig!); - meetingUrl = roomCode; return null; } return tokenData; diff --git a/packages/hms_room_kit/lib/src/screen_controller.dart b/packages/hms_room_kit/lib/src/screen_controller.dart index 006576058..64630bde3 100644 --- a/packages/hms_room_kit/lib/src/screen_controller.dart +++ b/packages/hms_room_kit/lib/src/screen_controller.dart @@ -18,7 +18,10 @@ import 'package:hms_room_kit/src/preview/preview_store.dart'; ///For more details checkout the [HMSPrebuiltOptions] class class ScreenController extends StatefulWidget { ///[roomCode] is the room code of the room to join - final String roomCode; + final String? roomCode; + + ///[token] auth token to join the room + final String? authToken; ///[options] is the options for the prebuilt ///For more details checkout the [HMSPrebuiltOptions] class @@ -30,7 +33,11 @@ class ScreenController extends StatefulWidget { final Function? onLeave; const ScreenController( - {super.key, required this.roomCode, this.options, this.onLeave}); + {super.key, + required this.roomCode, + this.options, + this.onLeave, + this.authToken}); @override State createState() => _ScreenControllerState(); } @@ -48,6 +55,7 @@ class _ScreenControllerState extends State { ///Setting the prebuilt options and roomCode Constant.prebuiltOptions = widget.options; Constant.roomCode = widget.roomCode; + Constant.authToken = widget.authToken; Constant.onLeave = widget.onLeave; ///Here we set the endPoints if it's non-null @@ -112,7 +120,7 @@ class _ScreenControllerState extends State { await _hmsSDKInteractor.build(); _previewStore = PreviewStore(hmsSDKInteractor: _hmsSDKInteractor); HMSException? ans = await _previewStore.startPreview( - userName: widget.options?.userName ?? "", roomCode: Constant.roomCode); + userName: widget.options?.userName ?? ""); ///If preview fails then we show the error dialog ///with the error message and description @@ -159,12 +167,10 @@ class _ScreenControllerState extends State { ? ListenableProvider.value( value: _previewStore, child: PreviewPage( - roomCode: Constant.roomCode, name: widget.options?.userName?.trim() ?? "", options: widget.options, )) : PreviewPermissions( - roomCode: Constant.roomCode, options: widget.options, callback: _isPermissionGrantedCallback), );