优化了老师端的等待状态判断逻辑
This commit is contained in:
@@ -1,4 +1,8 @@
|
||||
import 'package:agora_rtc_engine/agora_rtc_engine.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
import '../viewmodel/stu_room_vm.dart';
|
||||
|
||||
class TeacherVideo extends StatefulWidget {
|
||||
const TeacherVideo({super.key});
|
||||
@@ -10,10 +14,44 @@ class TeacherVideo extends StatefulWidget {
|
||||
class _TeacherVideoState extends State<TeacherVideo> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final vm = context.read<StuRoomVM>();
|
||||
final teacherInfo = vm.teacherInfo;
|
||||
|
||||
///没开始
|
||||
if (vm.roomStatus == 0) {
|
||||
return _empty("自习室还没开始");
|
||||
}
|
||||
|
||||
///开始
|
||||
if (vm.roomStatus == 1 && vm.engine != null) {
|
||||
if (teacherInfo == null) {
|
||||
return _empty("老师不在自习室内");
|
||||
}
|
||||
if (teacherInfo.online == 0) {
|
||||
return _empty("老师掉线了,请耐心等待");
|
||||
}
|
||||
return AgoraVideoView(
|
||||
controller: VideoViewController(
|
||||
rtcEngine: vm.engine!,
|
||||
canvas: VideoCanvas(
|
||||
uid: vm.teacherInfo!.userId,
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
///结束
|
||||
if (vm.roomStatus == 2) {
|
||||
return _empty("自习室已结束");
|
||||
}
|
||||
return _empty("加载中");
|
||||
}
|
||||
|
||||
Widget _empty(String title) {
|
||||
return SafeArea(
|
||||
child: Align(
|
||||
child: Text(
|
||||
"画面准备中",
|
||||
title,
|
||||
style: TextStyle(color: Colors.white),
|
||||
),
|
||||
),
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:agora_rtc_engine/agora_rtc_engine.dart';
|
||||
import 'package:app/config/config.dart';
|
||||
import 'package:app/providers/user_store.dart';
|
||||
import 'package:app/request/dto/room/room_info_dto.dart';
|
||||
import 'package:app/request/dto/room/room_type_dto.dart';
|
||||
@@ -36,12 +38,48 @@ class StuRoomVM extends ChangeNotifier {
|
||||
final RoomWebSocket _ws = RoomWebSocket();
|
||||
StreamSubscription<RoomMessage>? _sub;
|
||||
|
||||
RtcTokenDto? get rtcToken => _ws.rtcToken;
|
||||
/// 声网sdk管理
|
||||
RtcEngine? _engine;
|
||||
|
||||
RtcEngine? get engine => _engine;
|
||||
|
||||
StuRoomVM({required this.roomInfo, required this.uid}) {
|
||||
_startRoom();
|
||||
}
|
||||
|
||||
///初始化声网
|
||||
Future<void> _initRtc() async {
|
||||
_engine = createAgoraRtcEngine();
|
||||
//初始化 RtcEngine,设置频道场景为 channelProfileLiveBroadcasting(直播场景)
|
||||
await _engine!.initialize(
|
||||
RtcEngineContext(
|
||||
appId: Config.swAppId,
|
||||
channelProfile: ChannelProfileType.channelProfileCommunication,
|
||||
),
|
||||
);
|
||||
//启动视频模块
|
||||
await _engine!.enableVideo();
|
||||
//加入频道
|
||||
await _engine!.joinChannel(
|
||||
token: _ws.rtcToken!.token,
|
||||
channelId: _ws.rtcToken!.channel,
|
||||
uid: uid,
|
||||
// uid: _ws.rtcToken!.uid,
|
||||
options: ChannelMediaOptions(
|
||||
// 自动订阅所有视频流
|
||||
autoSubscribeVideo: true,
|
||||
// 自动订阅所有音频流
|
||||
autoSubscribeAudio: true,
|
||||
// 发布摄像头采集的视频
|
||||
publishCameraTrack: true,
|
||||
// 发布麦克风采集的音频
|
||||
publishMicrophoneTrack: true,
|
||||
// 设置用户角色为 clientRoleBroadcaster(主播)或 clientRoleAudience(观众)
|
||||
clientRoleType: ClientRoleType.clientRoleBroadcaster,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
///开始链接房间
|
||||
Future<void> _startRoom() async {
|
||||
//如果socket的token没有,先初始化
|
||||
|
||||
Reference in New Issue
Block a user