自习室优化ok

This commit is contained in:
zhutao
2025-11-28 13:31:23 +08:00
parent 4ecb0c35d6
commit 57305c5804
57 changed files with 2500 additions and 597 deletions

View File

@@ -1,4 +1,6 @@
import 'package:agora_rtc_engine/agora_rtc_engine.dart';
import 'package:app/pages/student/room/viewmodel/stu_room_vm.dart';
import 'package:app/widgets/room/video_surface.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
@@ -8,6 +10,9 @@ class StudentVideoList extends StatelessWidget {
@override
Widget build(BuildContext context) {
final vm = context.watch<StuRoomVM>();
if (vm.roomInfo.roomStatus != 1) {
return SizedBox();
}
return SafeArea(
child: Container(
width: 250,
@@ -26,6 +31,17 @@ class StudentVideoList extends StatelessWidget {
color: Color(0xff373c3e),
borderRadius: BorderRadius.circular(10),
),
child: VideoSurface(
user: item,
child: AgoraVideoView(
controller: VideoViewController(
rtcEngine: vm.engine!,
canvas: VideoCanvas(
uid: item.rtcUid,
),
),
),
),
),
),
Positioned(

View File

@@ -1,60 +1,83 @@
import 'package:agora_rtc_engine/agora_rtc_engine.dart';
import 'package:app/widgets/base/dialog/config_dialog.dart';
import 'package:app/widgets/room/other_widget.dart';
import 'package:app/widgets/room/video_surface.dart';
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:provider/provider.dart';
import '../viewmodel/stu_room_vm.dart';
class TeacherVideo extends StatefulWidget {
class TeacherVideo extends StatelessWidget {
const TeacherVideo({super.key});
@override
State<TeacherVideo> createState() => _TeacherVideoState();
}
class _TeacherVideoState extends State<TeacherVideo> {
@override
Widget build(BuildContext context) {
final vm = context.read<StuRoomVM>();
final vm = context.watch<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),
return PopScope(
canPop: false,
onPopInvokedWithResult: (didPop, _) {
if (!didPop) {
showDialog(
context: context,
builder: (context) {
return ConfigDialog(
content: "是否退出自习室",
onCancel: () {
context.pop();
},
onConfirm: () {
context.pop();
context.pop();
},
);
},
);
}
},
child: IgnorePointer(
child: Stack(
alignment: Alignment.bottomCenter,
children: [
VideoSurface(
user: teacherInfo!,
child: AgoraVideoView(
controller: VideoViewController(
rtcEngine: vm.engine!,
canvas: VideoCanvas(
uid: teacherInfo.rtcUid,
),
),
),
),
Positioned(
top: 0,
left: 0,
child: Container(
width: 150,
color: Colors.black,
child: AspectRatio(
aspectRatio: 1 / 1.2,
child: AgoraVideoView(
controller: VideoViewController(
rtcEngine: vm.engine!,
canvas: const VideoCanvas(uid: 0),
),
),
),
),
),
if (vm.selfInfo?.handup == 1)
Positioned(
bottom: 60,
child: HandRaiseButton(
onTap: vm.changeHandSwitch,
),
),
],
),
),
);
}
}
}