Files
xueguang_flutter_app/lib/pages/teacher/room/widgets/status_view.dart
zhutao b7239292d1 1
2025-11-20 18:00:34 +08:00

115 lines
2.5 KiB
Dart

import 'dart:async';
import 'package:app/utils/time.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'content_view.dart';
import '../viewmodel/students_view_model.dart';
class StatusView extends StatefulWidget {
const StatusView({super.key});
@override
State<StatusView> createState() => _StatusViewState();
}
class _StatusViewState extends State<StatusView> {
///房间状态
RoomStatus status = RoomStatus.loading;
///剩余秒
int _seconds = 0;
Timer? _timer;
@override
void initState() {
super.initState();
_init();
}
@override
void dispose() {
super.dispose();
_timer?.cancel();
_timer = null;
}
void _init() {
final vm = context.read<StudentsViewModel>();
//如果房间可以开始
if (vm.canEnterRoom) {
status = RoomStatus.start;
} else {
status = RoomStatus.waiting;
startCountDown();
}
}
///开始倒计时
void startCountDown() {
final vm = context.read<StudentsViewModel>();
//当前时间
DateTime now = DateTime.now();
//远端时间
setState(() {
_seconds = vm.startTime.difference(now).inSeconds;
});
_timer = Timer.periodic(Duration(seconds: 1), (timer) {
setState(() {
_seconds--;
});
if (_seconds <= 0) {
_timer?.cancel();
_timer = null;
setState(() {
status = RoomStatus.start;
});
}
});
}
///开启自习室
void openRoom() {
final vm = context.read<StudentsViewModel>();
vm.toggleRoom(isOpen: true);
}
@override
Widget build(BuildContext context) {
if (status == RoomStatus.waiting) {
return Align(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
"未到开播时间,到点后自动开播",
style: TextStyle(color: Colors.white),
),
Container(
margin: EdgeInsets.symmetric(vertical: 10),
child: Text(
formatSeconds(_seconds),
style: TextStyle(
color: Colors.white,
fontSize: 26,
fontWeight: FontWeight.bold,
),
),
),
],
),
);
} else if (status == RoomStatus.start) {
return ContentView();
}
return SizedBox();
}
}
enum RoomStatus {
loading, // 加载中
waiting, //房间倒计时等待中
start, //房间开始中
}