Compare commits

...

3 Commits

Author SHA1 Message Date
machuanyu cbd5b724e9 Merge branch 'new_main' into mcy_new
# Conflicts:
#	making_school_asignment_app/lib/page/home_page/home_view.dart
2024-06-25 17:12:36 +08:00
1147192855@qq.com 9792eda546 no message 2024-06-25 16:52:06 +08:00
1147192855@qq.com 2fe7dc814e no message 2024-06-25 10:24:00 +08:00
8 changed files with 216 additions and 190 deletions

View File

@ -5,6 +5,7 @@
android:icon="@mipmap/ic_launcher">
<activity
android:name=".MainActivity"
android:screenOrientation="portrait"
android:exported="true"
android:launchMode="singleTop"
android:taskAffinity=""

View File

@ -20,10 +20,13 @@ void main() async {
/// UserStore
Get.put<UserStore>(UserStore().init());
SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: [SystemUiOverlay.top, SystemUiOverlay.bottom]); //
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); //
WidgetsFlutterBinding.ensureInitialized();
SystemChrome.setSystemUIOverlayStyle(const SystemUiOverlayStyle(
statusBarColor: Colors.transparent, //
statusBarIconBrightness: Brightness.dark // dark: light
));
SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: [SystemUiOverlay.top, SystemUiOverlay.bottom]); //
await SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp, DeviceOrientation.portraitDown]); //
runApp(const MyApp());
}

View File

@ -7,7 +7,6 @@ import 'package:flutter_spinkit/flutter_spinkit.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:functional_widget_annotation/functional_widget_annotation.dart';
import 'package:get/get.dart';
import 'package:get/get_connect/http/src/request/request.dart';
import 'package:making_school_asignment_app/common/job/marking_models/do_test_questions_image_info.dart';
import 'package:making_school_asignment_app/common/job/marking_models/original_manuscript_handwriting_params.dart';
import 'package:making_school_asignment_app/common/mixins/event_bus_mixin.dart';
@ -16,7 +15,6 @@ import 'package:making_school_asignment_app/common/utils/anti_shake_throttling.d
import 'package:making_school_asignment_app/common/utils/cached_network_img.dart';
import 'package:making_school_asignment_app/common/utils/my_time_util.dart';
import 'package:making_school_asignment_app/common/utils/toast_utils.dart';
import 'package:making_school_asignment_app/common/utils/utils.dart';
import 'package:making_school_asignment_app/page/global_widget/my_text.dart';
import 'package:making_school_asignment_app/page/home_page/children/homework_review/components/job_handwriting.dart';
@ -252,6 +250,8 @@ class PreviousNutton extends StatelessWidget {
var params = handwritingLogic.params.value;
if (resultData == null || params == null) return;
params.pageNum = resultData.pageNum - 1;
params.templateId = null;
params.questionNo = null;
handwritingLogic.params.value = OriginalManuscriptHandwritingParams.fromJson(params.toJson());
// handwritingLogic.params.value = params;
}),
@ -288,6 +288,8 @@ class NextPageButton extends StatelessWidget {
var params = handwritingLogic.params.value;
if (resultData == null || params == null) return;
params.pageNum = resultData.pageNum + 1;
params.templateId = null;
params.questionNo = null;
handwritingLogic.params.value = OriginalManuscriptHandwritingParams.fromJson(params.toJson());
}),
child: Icon(Icons.arrow_forward_ios, color: Colors.white, size: 22.sp),

View File

@ -25,18 +25,18 @@ class _StudentPersonalPageState extends State<StudentPersonalPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Color.fromRGBO(245, 245, 245, 1),
backgroundColor: const Color.fromRGBO(245, 245, 245, 1),
appBar: AppBar(
backgroundColor: Colors.white,
title: Obx(() {
return Text(
state.studentInfo.value.studentName,
style: TextStyle(fontSize: 14.sp, color: Color(0xFF000000)),
style: TextStyle(fontSize: 14.sp, color: const Color(0xFF000000)),
);
}),
centerTitle: true,
leading: IconButton(
icon: Icon(Icons.arrow_back_ios, color: Colors.black),
icon: const Icon(Icons.arrow_back_ios, color: Colors.black),
onPressed: () => Get.back(),
),
actions: const [
@ -61,13 +61,13 @@ class _StudentPersonalPageState extends State<StudentPersonalPage> {
width: 93.r,
height: 28.r,
decoration: BoxDecoration(
color: Color(0xFFEAF3FF),
color: const Color(0xFFEAF3FF),
borderRadius: BorderRadius.circular(4.r),
),
child: Center(
child: Text(
'历史作业',
style: TextStyle(fontSize: 10.r, color: Color(0xFF2080F7)),
style: TextStyle(fontSize: 10.r, color: const Color(0xFF2080F7)),
),
),
),
@ -82,13 +82,13 @@ class _StudentPersonalPageState extends State<StudentPersonalPage> {
width: 93.r,
height: 28.r,
decoration: BoxDecoration(
color: Color(0xFFEDFFF7),
color: const Color(0xFFEDFFF7),
borderRadius: BorderRadius.circular(4.r),
),
child: Center(
child: Text(
'原稿笔迹',
style: TextStyle(fontSize: 10.r, color: Color(0xFF4CC793)),
style: TextStyle(fontSize: 10.r, color: const Color(0xFF4CC793)),
),
),
),
@ -112,7 +112,7 @@ class _StudentPersonalPageState extends State<StudentPersonalPage> {
children: [
Text(
'客观题',
style: TextStyle(fontSize: 14.sp, color: Color(0xFF5C5C5C), fontWeight: FontWeight.w600),
style: TextStyle(fontSize: 14.sp, color: const Color(0xFF5C5C5C), fontWeight: FontWeight.w600),
),
SizedBox(
width: 10.r,
@ -120,7 +120,7 @@ class _StudentPersonalPageState extends State<StudentPersonalPage> {
Obx(() {
return Text(
'${state.studentInfo.value.kgtCorrectRate}%',
style: TextStyle(fontSize: 14.sp, color: Color(0xFF6888FD), fontWeight: FontWeight.w600),
style: TextStyle(fontSize: 14.sp, color: const Color(0xFF6888FD), fontWeight: FontWeight.w600),
);
}),
],
@ -132,9 +132,12 @@ class _StudentPersonalPageState extends State<StudentPersonalPage> {
return SizedBox(
height: state.studentInfo.value.kgtList.length > 8 ? 300.r : state.studentInfo.value.kgtList.length * 40.r + 40.r,
child: StudentKgTable(
headList: ['题号', '学生答案', '标准答案'],
headList: const ['题号', '学生答案', '标准答案'],
bodyList: state.studentInfo.value.kgtList,
questionNumCall: (no) {
questionNumCall: (questionNo, templateId) {
showAnswerHandwriting(context,
homeworkId: state.homeworkId, studentId: state.studentId, questionNo: questionNo, templateId: templateId)
.then((e) => ToastUtils.dismiss());
// showAnswerHandwriting(context, jobId: widget.jobId, studentId: widget.studentId, questionNo: int.parse(no)).then((value) {
// ref.read(jobHandwritingDrawingTrajectoryProvider.notifier).setVal([]);
// });
@ -164,7 +167,7 @@ class _StudentPersonalPageState extends State<StudentPersonalPage> {
children: [
Text(
'主观题',
style: TextStyle(fontSize: 14.sp, color: Color(0xFF5C5C5C), fontWeight: FontWeight.w600),
style: TextStyle(fontSize: 14.sp, color: const Color(0xFF5C5C5C), fontWeight: FontWeight.w600),
),
SizedBox(
width: 10.r,
@ -172,7 +175,7 @@ class _StudentPersonalPageState extends State<StudentPersonalPage> {
Obx(() {
return Text(
'${state.studentInfo.value.zgtCorrectRate}%',
style: TextStyle(fontSize: 14.sp, color: Color(0xFF6888FD), fontWeight: FontWeight.w600),
style: TextStyle(fontSize: 14.sp, color: const Color(0xFF6888FD), fontWeight: FontWeight.w600),
);
}),
],
@ -184,12 +187,15 @@ class _StudentPersonalPageState extends State<StudentPersonalPage> {
return SizedBox(
height: state.studentInfo.value.zgtList.length > 8 ? 300.r : state.studentInfo.value.zgtList.length * 40.r + 40.r,
child: StudentZgTable(
headList: ['题号', '用时', '批注结果', '答案'],
headList: const ['题号', '用时', '批注结果', '答案'],
bodyList: state.studentInfo.value.zgtList,
questionNumCall: (no) {
questionNumCall: (questionNo, templateId) {
/* showAnswerHandwriting(context, jobId: widget.jobId, studentId: widget.studentId, questionNo: int.parse(no)).then((value) {
ref.read(jobHandwritingDrawingTrajectoryProvider.notifier).setVal([]);
});*/
showAnswerHandwriting(context,
homeworkId: state.homeworkId, studentId: state.studentId, questionNo: questionNo, templateId: templateId)
.then((e) => ToastUtils.dismiss());
},
),
);

View File

@ -9,7 +9,7 @@ class StudentKgTable extends StatefulWidget {
final List bodyList;
final int? fixedRows;
final int? fixedCols;
final Function(String)? questionNumCall;
final Function(int, int)? questionNumCall;
const StudentKgTable({
Key? key,
@ -44,7 +44,7 @@ class _StudentKgTableState extends State<StudentKgTable> {
InkWell(
onTap: () {
if (widget.questionNumCall != null) {
widget.questionNumCall!(item.questionNo.toString());
widget.questionNumCall!(item.questionNo, item.templateId);
}
},
child: Center(

View File

@ -11,7 +11,7 @@ class StudentZgTable extends StatefulWidget {
final List bodyList;
final int? fixedRows;
final int? fixedCols;
final Function(String)? questionNumCall;
final Function(int, int)? questionNumCall;
const StudentZgTable({
Key? key,
@ -41,7 +41,7 @@ class _StudentZgTableState extends State<StudentZgTable> {
DataCell(InkWell(
onTap: () {
if (widget.questionNumCall != null) {
widget.questionNumCall!(item.questionNo.toString());
widget.questionNumCall!(item.questionNo, item.templateId);
}
},
child: Center(

View File

@ -45,26 +45,31 @@ class _HomePageState extends State<HomePage> with AutomaticKeepAliveClientMixin
statusBarIconBrightness: Brightness.dark,
statusBarBrightness: Brightness.light,
),
child: EasyRefresh(
firstRefresh: false,
taskIndependence: true,
controller: logic.refreshController,
header: MaterialHeader(),
footer: TaurusFooter(),
onRefresh: () async {
state.pageNumber = 1;
return logic.getList();
},
onLoad: () async {
if (state.workList.length < state.totalCount.value) {
state.pageNumber++;
return logic.getList();
}
},
child: Column(
children: [
SizedBox(height: 15.r,),
/* Container(
child: OrientationBuilder(
builder: (BuildContext context, Orientation orientation) {
print('1111111111111');
return EasyRefresh(
firstRefresh: false,
taskIndependence: true,
controller: logic.refreshController,
header: MaterialHeader(),
footer: TaurusFooter(),
onRefresh: () async {
state.pageNumber = 1;
return logic.getList();
},
onLoad: () async {
if (state.workList.length < state.totalCount.value) {
state.pageNumber++;
return logic.getList();
}
},
child: Column(
children: [
SizedBox(
height: 15.r,
),
/* Container(
height: 200.h,
width: double.infinity,
decoration: const BoxDecoration(
@ -74,30 +79,31 @@ class _HomePageState extends State<HomePage> with AutomaticKeepAliveClientMixin
),
),
),*/
Obx(() {
return $TermRow([
EntranceModel(title: '作业批阅', image: 'assets/images/job_home_marking.png', navigationUrl: Routes.readOverPage),
EntranceModel(
title: '学生历史作业',
image: 'assets/images/job_home_history.png',
navigationUrl: Routes.studentHistoryWorkPage,
page: 'history',
),
EntranceModel(title: '知识点点掌握', image: 'assets/images/job_home_knowledge.png', navigationUrl: Routes.knowledgePointsGraspPage)
], state.totalCount.value);
}),
spaceWidth,
$TermRow([
EntranceModel(title: '答题轨迹', image: 'assets/images/job_home_answer_record.png', navigationUrl: Routes.answerTrajectoryPage),
EntranceModel(
title: '优先批阅设定',
image: 'assets/images/job_home_youxian.png',
navigationUrl: Routes.studentHistoryWorkPage,
page: 'set',
)
], 0),
SizedBox(height: MediaQuery.of(context).padding.top / 2),
Obx(() {
return $TermRow([
EntranceModel(title: '作业批阅', image: 'assets/images/job_home_marking.png', navigationUrl: Routes.readOverPage),
EntranceModel(
title: '学生历史作业',
image: 'assets/images/job_home_history.png',
navigationUrl: Routes.studentHistoryWorkPage,
page: 'history',
),
EntranceModel(title: '知识点点掌握', image: 'assets/images/job_home_knowledge.png', navigationUrl: Routes.knowledgePointsGraspPage)
], state.totalCount.value);
}),
spaceWidth,
$TermRow([
EntranceModel(title: '答题轨迹', image: 'assets/images/job_home_answer_record.png', navigationUrl: Routes.answerTrajectoryPage),
EntranceModel(
title: '优先批阅设定',
image: 'assets/images/job_home_youxian.png',
navigationUrl: Routes.studentHistoryWorkPage,
page: 'set',
)
], 0),
/* $TermRow(
/* $TermRow(
context,
[
EntranceModel(
@ -106,142 +112,144 @@ class _HomePageState extends State<HomePage> with AutomaticKeepAliveClientMixin
navigationUrl: '')
],
0),*/
SizedBox(height: 15.h),
Obx(() {
return Container(
padding: EdgeInsets.symmetric(horizontal: 12.w),
child: Column(
children: List.generate(state.workList.length, (index) {
Items item = state.workList[index];
return InkWell(
onTap: () {
Get.toNamed(Routes.annotateClassPage, arguments: {
'id': item.id,
'name': item.name,
'grade': item.grade,
'subject': item.subject,
});
},
child: Container(
margin: EdgeInsets.only(bottom: 15.h),
child: Column(
children: [
SizedBox(height: 4.h),
Container(
padding: EdgeInsets.symmetric(vertical: 15.h, horizontal: 10.w),
width: double.infinity,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(6.r),
color: const Color.fromRGBO(255, 255, 255, 1),
boxShadow: const [
BoxShadow(
color: Color.fromRGBO(210, 216, 241, 1),
offset: Offset.zero, //y轴偏移量
blurRadius: 5.8, //
spreadRadius: 0, //
)
],
),
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
width: Utils.isPad() ? 32.w : 38.w,
height: 18.h,
alignment: Alignment.center,
padding: EdgeInsets.only(left: Utils.isPad() ? 2.w : 3.w),
decoration: BoxDecoration(
color: state.type == 1 ? const Color.fromRGBO(104, 136, 253, 1) : const Color.fromRGBO(255, 175, 56, 1),
borderRadius: BorderRadius.only(
topLeft: Radius.circular(14.r),
topRight: Radius.circular(3.r),
bottomLeft: Radius.circular(4.r),
bottomRight: Radius.circular(4.r),
),
),
margin: EdgeInsets.only(top:3.h,right: 4.w),
child: quickText(state.type == 1 ? '作业' : '考试', color: Colors.white, size: 10.sp),
),
Expanded(
child: quickText(
item.name,
maxLines: 2,
size: Utils.isPad() ? 14.sp : 16.sp,
color: const Color.fromRGBO(70, 70, 70, 1),
fontWeight: FontWeight.bold,
),
SizedBox(height: 15.h),
Obx(() {
return Container(
padding: EdgeInsets.symmetric(horizontal: 12.w),
child: Column(
children: List.generate(state.workList.length, (index) {
Items item = state.workList[index];
return InkWell(
onTap: () {
Get.toNamed(Routes.annotateClassPage, arguments: {
'id': item.id,
'name': item.name,
'grade': item.grade,
'subject': item.subject,
});
},
child: Container(
margin: EdgeInsets.only(bottom: 15.h),
child: Column(
children: [
SizedBox(height: 4.h),
Container(
padding: EdgeInsets.symmetric(vertical: 15.h, horizontal: 10.w),
width: double.infinity,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(6.r),
color: const Color.fromRGBO(255, 255, 255, 1),
boxShadow: const [
BoxShadow(
color: Color.fromRGBO(210, 216, 241, 1),
offset: Offset.zero, //y轴偏移量
blurRadius: 5.8, //
spreadRadius: 0, //
)
],
),
SizedBox(height: 10.h),
Row(
crossAxisAlignment: CrossAxisAlignment.end,
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
quickText(
EnumUtils.formatSubject(item.subject),
color: const Color.fromRGBO(97, 97, 97, 1),
size: 12.sp,
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
width: Utils.isPad() ? 32.w : 38.w,
height: 18.h,
alignment: Alignment.center,
padding: EdgeInsets.only(left: Utils.isPad() ? 2.w : 3.w),
decoration: BoxDecoration(
color: state.type == 1 ? const Color.fromRGBO(104, 136, 253, 1) : const Color.fromRGBO(255, 175, 56, 1),
borderRadius: BorderRadius.only(
topLeft: Radius.circular(14.r),
topRight: Radius.circular(3.r),
bottomLeft: Radius.circular(4.r),
bottomRight: Radius.circular(4.r),
),
),
margin: EdgeInsets.only(right: 4.w),
child: quickText(state.type == 1 ? '作业' : '考试', color: Colors.white, size: 10.sp),
),
Expanded(
child: quickText(
item.name,
maxLines: 2,
size: Utils.isPad() ? 14.sp : 16.sp,
color: const Color.fromRGBO(70, 70, 70, 1),
fontWeight: FontWeight.bold,
),
)
],
),
quickText(' / ', color: const Color.fromRGBO(130, 130, 130, 1), size: 11.sp, fontWeight: FontWeight.w500),
SizedBox(height: 10.h),
Row(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
quickText('题量:', color: const Color.fromRGBO(130, 130, 130, 1), size: 11.sp),
quickText(
'${item.questionCount! - item.annotateCount!}',
EnumUtils.formatSubject(item.subject),
color: const Color.fromRGBO(97, 97, 97, 1),
size: 13.sp,
size: 12.sp,
),
quickText(' / ', color: const Color.fromRGBO(130, 130, 130, 1), size: 11.sp, fontWeight: FontWeight.w500),
Row(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
quickText('题量:', color: const Color.fromRGBO(130, 130, 130, 1), size: 11.sp),
quickText(
'${item.questionCount! - item.annotateCount!}',
color: const Color.fromRGBO(97, 97, 97, 1),
size: 13.sp,
),
],
),
quickText(' / ', color: const Color.fromRGBO(130, 130, 130, 1), size: 11.sp, fontWeight: FontWeight.w500),
quickText(DateTime.parse(item.publishTime).toString().substring(0, 10),
color: const Color.fromRGBO(97, 97, 97, 1), size: 12.sp),
],
),
quickText(' / ', color: const Color.fromRGBO(130, 130, 130, 1), size: 11.sp, fontWeight: FontWeight.w500),
quickText(DateTime.parse(item.publishTime).toString().substring(0, 10),
color: const Color.fromRGBO(97, 97, 97, 1), size: 12.sp),
SizedBox(height: 10.h),
Row(
children: [
Expanded(
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10.r),
),
child: LinearPercentIndicator(
padding: EdgeInsets.zero,
animation: true,
lineHeight: 8.h,
animationDuration: 2500,
percent: item.annotateRate == null ? 0 : item.annotateRate! / 100,
progressColor: const Color(0xFF6888FD),
backgroundColor: const Color(0xFFE8E8E8),
barRadius: Radius.circular(10.r),
),
),
),
SizedBox(
width: 10.r,
),
quickText('${item.annotateRate!.toStringAsFixed(0)}%', size: 10.sp, color: const Color(0xFF464646)),
],
),
// FavoriteButton(jobTaskItem.id, jobTaskItem.title),
],
),
SizedBox(height: 10.h),
Row(
children: [
Expanded(
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10.r),
),
child: LinearPercentIndicator(
padding: EdgeInsets.zero,
animation: true,
lineHeight: 8.h,
animationDuration: 2500,
percent: item.annotateRate == null ? 0 : item.annotateRate! / 100,
progressColor: const Color(0xFF6888FD),
backgroundColor: const Color(0xFFE8E8E8),
barRadius: Radius.circular(10.r),
),
),
),
SizedBox(
width: 10.r,
),
quickText('${item.annotateRate!.toStringAsFixed(0)}%', size: 10.sp, color: const Color(0xFF464646)),
],
),
// FavoriteButton(jobTaskItem.id, jobTaskItem.title),
],
),
),
],
),
],
),
),
);
}),
),
);
}),
],
),
),
);
}),
),
);
}),
],
),
);
},
),
));
}

View File

@ -29,6 +29,7 @@ class _WorkPageState extends State<WorkPage> with AutomaticKeepAliveClientMixin
@override
Widget build(BuildContext context) {
super.build(context);
return AnnotatedRegion(
value: const SystemUiOverlayStyle(
systemNavigationBarColor: Color(0xFF000000),
@ -147,9 +148,14 @@ class _WorkPageState extends State<WorkPage> with AutomaticKeepAliveClientMixin
],
),
),
Expanded(child: Obx(() {
return AnnotateList(tabIndex: state.tabIndex.value,assessType: 1,);
}),),
Expanded(
child: Obx(() {
return AnnotateList(
tabIndex: state.tabIndex.value,
assessType: 1,
);
}),
),
],
);
},