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

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');
}
}
}