自习室优化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,9 +1,11 @@
import 'package:app/config/theme/base/app_theme_ext.dart';
import 'package:app/widgets/version/version_dialog.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'viewmodel/home_view_model.dart';
import 'widgets/header.dart';
import 'widgets/tip_card.dart';
import 'widgets/today_card.dart';
class THomePage extends StatelessWidget {
@@ -11,6 +13,7 @@ class THomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
showUpdateDialog(context);
return ChangeNotifierProvider(
create: (_) => HomeViewModel(),
child: const _HomeView(),
@@ -24,6 +27,7 @@ class _HomeView extends StatelessWidget {
@override
Widget build(BuildContext context) {
final vm = context.read<HomeViewModel>();
return Scaffold(
backgroundColor: Theme.of(context).colorScheme.surfaceContainer,
appBar: Header(),
@@ -36,6 +40,8 @@ class _HomeView extends StatelessWidget {
),
children: [
TodayCard(),
TipCard1(),
TipCard2(),
],
),
),

View File

@@ -1,10 +1,10 @@
import 'package:app/request/api/room_api.dart';
import 'package:app/request/dto/room/room_info_dto.dart';
import 'package:app/request/dto/room/room_list_item_dto.dart';
import 'package:app/utils/time.dart';
import 'package:flutter/material.dart';
class HomeViewModel extends ChangeNotifier {
RoomInfoDto? roomInfo;
RoomListItemDto ? roomInfo;
bool loading = true;
HomeViewModel() {

View File

@@ -0,0 +1,143 @@
import 'package:app/widgets/base/card/g_card.dart';
import 'package:flutter/material.dart';
import 'package:remixicon/remixicon.dart';
class TipCard1 extends StatelessWidget {
const TipCard1({super.key});
@override
Widget build(BuildContext context) {
final list = [
{
"icon": RemixIcons.video_on_line,
"title": "实时视频互动",
"subtitle": "高清视频连接,随时与学生面对面交流",
},
{
"icon": RemixIcons.file_list_line,
"title": "查看学生资料",
"subtitle": "查看学生上传的作业、题目和笔记",
},
{
"icon": RemixIcons.message_line,
"title": "灵活管控",
"subtitle": "一键控制学生的视频、音频状态",
},
{
"icon": RemixIcons.lightbulb_line,
"title": "白板演示",
"subtitle": "开启白板功能,为学生讲解疑难问题",
},
];
return Container(
margin: EdgeInsets.only(top: 15),
child: Column(
spacing: 10,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text("核心功能"),
GridView.builder(
shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(),
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
mainAxisExtent: 80,
crossAxisSpacing: 15,
mainAxisSpacing: 15,
),
itemBuilder: (_, index) {
final item = list[index] as dynamic;
return GCard(
child: Row(
spacing: 10,
children: [
Container(
width: 50,
height: 50,
decoration: BoxDecoration(
color: Theme.of(context).primaryColor,
borderRadius: BorderRadius.circular(10),
),
child: Icon(
item["icon"],
color: Colors.white,
),
),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(item["title"]),
Text(
item["subtitle"],
style: Theme.of(context).textTheme.labelLarge,
),
],
),
],
),
);
},
itemCount: list.length,
),
],
),
);
}
}
class TipCard2 extends StatelessWidget {
const TipCard2({super.key});
@override
Widget build(BuildContext context) {
final tipList = [
"请确保网络环境良好,保证视频通话质量",
"建议提前5分钟进入自习室准备教学材料",
"合理使用白板功能,帮助学生更好地理解知识点",
"关注每位学生的学习状态,及时提供帮助",
];
return Container(
margin: EdgeInsets.only(top: 15),
padding: EdgeInsets.all(15),
decoration: BoxDecoration(
color: Color(0xfffffbeb),
borderRadius: BorderRadius.circular(10),
border: Border.all(
color: Color(0xfffee685),
),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
margin: EdgeInsets.only(bottom: 10),
child: Text("温馨提示"),
),
ListView.separated(
shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(),
itemBuilder: (_, index) {
return Row(
spacing: 4,
children: [
Container(
width: 5,
height: 5,
decoration: BoxDecoration(shape: BoxShape.circle, color: Colors.black),
),
Text(
tipList[index],
style: Theme.of(context).textTheme.labelLarge,
),
],
);
},
separatorBuilder: (_, __) => SizedBox(height: 3),
itemCount: tipList.length,
),
],
),
);
}
}

View File

@@ -1,11 +1,10 @@
import 'package:app/router/route_paths.dart';
import 'package:app/utils/permission.dart';
import 'package:app/utils/time.dart';
import 'package:app/widgets/base/button/index.dart';
import 'package:app/widgets/base/card/g_card.dart';
import 'package:app/widgets/base/config/config.dart';
import 'package:app/widgets/base/dialog/config_dialog.dart';
import 'package:app/widgets/base/empty/index.dart';
import 'package:app/widgets/room/file_drawer.dart';
import 'package:flutter/material.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:go_router/go_router.dart';
@@ -93,7 +92,7 @@ class _TodayCardState extends State<TodayCard> {
),
_item(
title: "时长",
value: "${vm.roomMinutes} 分钟",
value: "${formatSeconds(vm.roomMinutes * 60, 'hh小时mm分钟')} ",
icon: RemixIcons.book_open_line,
color: Color(0xffac45fd),
),
@@ -106,7 +105,7 @@ class _TodayCardState extends State<TodayCard> {
child: Button(
text: vm.canEnterRoom ? "开始自习室" : "未到开始时间",
type: ThemeType.success,
// disabled: !vm.canEnterRoom,
disabled: !vm.canEnterRoom,
onPressed: _goToRoom,
),
),