初始化

This commit is contained in:
zhutao
2025-11-19 17:56:39 +08:00
commit 1b28239352
115 changed files with 5440 additions and 0 deletions

View File

@@ -0,0 +1,105 @@
import 'package:app/widgets/room/file_drawer.dart';
import 'package:app/widgets/room/video_surface.dart';
import 'package:flutter/material.dart';
import 'package:remixicon/remixicon.dart';
class StudentItem extends StatefulWidget {
const StudentItem({super.key});
@override
State<StudentItem> createState() => _StudentItemState();
}
class _StudentItemState extends State<StudentItem> {
///打开文件列表
void _openFileList(){
showFileDialog(context,isUpload: false);
}
@override
Widget build(BuildContext context) {
return ClipRRect(
borderRadius: BorderRadius.circular(10),
child: Container(
color: Color(0xFF404649),
child: Column(
children: [
Expanded(
child: SizedBox(
width: double.infinity,
child: Stack(
children: [
VideoSurface(
),
Positioned(
bottom: 0,
left: 0,
right: 0,
child: Container(
padding: EdgeInsets.symmetric(horizontal: 10, vertical: 8),
decoration: BoxDecoration(
gradient: LinearGradient(
colors: [Color(0x0b050505), Color(0x54050505)],
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
),
),
child: Text(
"李明辉",
style: TextStyle(
color: Colors.white,
fontSize: 14,
),
),
),
),
],
),
),
),
ColoredBox(
color: Color(0xFF232426),
child: Row(
children: [
_actionItem(icon: RemixIcons.video_on_fill, isActive: false),
_actionItem(
icon: RemixIcons.mic_off_fill,
),
_actionItem(
icon: RemixIcons.volume_mute_fill,
),
_actionItem(
icon: RemixIcons.file_list_3_fill,
onTap: _openFileList
),
],
),
),
],
),
),
);
}
///
Widget _actionItem({
required IconData icon,
bool isActive = true,
void Function()? onTap,
}) {
Color offColor = Color(0xFFE75B61);
return Expanded(
child: Container(
height: 50,
color: isActive ? null : offColor.withValues(alpha: 0.3),
child: IconButton(
onPressed: onTap,
icon: Icon(
icon,
color: isActive ? Colors.white : offColor,
size: 20,
),
),
),
);
}
}

View File

@@ -0,0 +1,80 @@
import 'dart:async';
import 'package:app/utils/time.dart';
import 'package:flutter/material.dart';
class WaitingStart extends StatefulWidget {
const WaitingStart({super.key});
@override
State<WaitingStart> createState() => _WaitingStartState();
}
class _WaitingStartState extends State<WaitingStart> {
///剩余秒
int _seconds = 0;
Timer? _timer;
@override
void initState() {
super.initState();
startCountDown();
}
@override
void dispose() {
super.dispose();
_timer?.cancel();
_timer = null;
}
///开始倒计时
void startCountDown() {
//当前时间
DateTime now = DateTime.now();
//远端时间
DateTime remote = DateTime.parse("2025-11-19 17:10:00".replaceFirst(' ', 'T'));
setState(() {
_seconds = remote.difference(now).inSeconds;
});
_timer = Timer.periodic(Duration(seconds: 1), (timer) {
setState(() {
_seconds--;
});
if (_seconds <= 0) {
_timer?.cancel();
_timer = null;
_start();
}
});
}
///倒计时结束开始
void _start() {}
@override
Widget build(BuildContext context) {
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,
),
),
),
],
),
);
}
}