You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
1.7 KiB
56 lines
1.7 KiB
import 'package:dating_touchme_app/model/rtc/rtc_channel_data.dart';
|
|
import 'package:dating_touchme_app/network/network_service.dart';
|
|
import 'package:dating_touchme_app/rtc/rtc_manager.dart';
|
|
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
|
|
import 'package:get/get.dart';
|
|
|
|
import '../../pages/discover/live_room_page.dart';
|
|
|
|
/// 直播房间相关控制器
|
|
class RoomController extends GetxController {
|
|
RoomController({NetworkService? networkService})
|
|
: _networkService = networkService ?? Get.find<NetworkService>();
|
|
|
|
final NetworkService _networkService;
|
|
|
|
/// 当前频道信息
|
|
final Rxn<RtcChannelData> rtcChannel = Rxn<RtcChannelData>();
|
|
|
|
/// 是否正在创建
|
|
final RxBool isLoading = false.obs;
|
|
|
|
/// 调用接口创建 RTC 频道
|
|
Future<void> createRtcChannel() async {
|
|
if (isLoading.value) return ;
|
|
|
|
try {
|
|
isLoading.value = true;
|
|
final response = await _networkService.rtcApi.createRtcChannel();
|
|
final base = response.data;
|
|
|
|
if (base.isSuccess && base.data != null) {
|
|
rtcChannel.value = base.data;
|
|
await _joinRtcChannel(base.data!);
|
|
} else {
|
|
final message = base.message.isNotEmpty ? base.message : '创建频道失败';
|
|
SmartDialog.showToast(message);
|
|
}
|
|
} catch (e) {
|
|
SmartDialog.showToast('创建频道异常:$e');
|
|
} finally {
|
|
isLoading.value = false;
|
|
}
|
|
}
|
|
Future<void> _joinRtcChannel(RtcChannelData data) async {
|
|
try {
|
|
await RTCManager.instance.joinChannel(
|
|
token: data.token,
|
|
channelId: data.channelId,
|
|
);
|
|
Get.to(() => const LiveRoomPage(id: 0));
|
|
} catch (e) {
|
|
SmartDialog.showToast('加入频道失败:$e');
|
|
}
|
|
}
|
|
}
|
|
|