取消收藏

This commit is contained in:
machuanyu 2024-03-14 09:14:09 +08:00
parent dd8ae7724a
commit 8e0522bc6b
4 changed files with 273 additions and 132 deletions

View File

@ -46,7 +46,7 @@ class Items extends Object {
int teacherId;
@JsonKey(name: 'teacherAccount')
String teacherAccount;
String? teacherAccount;
@JsonKey(name: 'folderName')
String folderName;

View File

@ -1,17 +1,49 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:marking_app/common/model/job/job_fav_student.dart';
import 'package:marking_app/utils/easy_refresh/MyEmptyWidget.dart';
import 'package:photo_view/photo_view.dart';
import 'package:photo_view/photo_view_gallery.dart';
class FavoriteStudentDialog extends StatefulWidget {
const FavoriteStudentDialog({Key? key}) : super(key: key);
final Items item;
final List group;
final Function deleteFav;
const FavoriteStudentDialog(
{Key? key, required this.item, required this.group,required this.deleteFav})
: super(key: key);
@override
State<FavoriteStudentDialog> createState() => _FavoriteStudentDialogState();
}
class _FavoriteStudentDialogState extends State<FavoriteStudentDialog> {
int defaultIndex = 1;
int defaultIndex = 0;
List<Items> imageList = [];
late PageController pageController;
late Items currentStudent;
void initState() {
pageController = PageController(initialPage: defaultIndex);
currentStudent = widget.item;
List<Items> list = [];
widget.group.forEach((element) {
for (var item in element['list']) {
list.add(item);
}
});
setState(() {
imageList = list;
defaultIndex = list.indexWhere((element) => element.id == widget.item.id);
});
}
void dispose() {
super.dispose();
pageController.dispose();
}
@override
Widget build(BuildContext context) {
@ -25,24 +57,34 @@ class _FavoriteStudentDialogState extends State<FavoriteStudentDialog> {
mainAxisAlignment: MainAxisAlignment.start,
children: [
Text(
'14班 张小凡',
'${currentStudent.className} ${currentStudent.studentName}',
style: TextStyle(fontSize: 12.sp, color: Color(0xFF4E73FD)),
),
Expanded(child: Container()),
Text(
'6题',
'${currentStudent.questionPage}',
style: TextStyle(fontSize: 12.sp, color: Color(0xFF868686)),
),
Padding(
padding: EdgeInsets.symmetric(horizontal: 8.r),
child: Image.asset(
'assets/images/favorite_delete_icon.png',
width: 22.r,
height: 22.r,
),
),
InkWell(
onTap: (){
widget.deleteFav(currentStudent);
imageList.removeAt(defaultIndex);
setState(() {
});
},
child: Padding(
padding: EdgeInsets.symmetric(horizontal: 8.r),
child: Image.asset(
'assets/images/favorite_delete_icon.png',
width: 22.r,
height: 22.r,
),
),
),
InkWell(
onTap: () {
Navigator.pop(context);
},
child: Image.asset(
@ -53,47 +95,106 @@ class _FavoriteStudentDialogState extends State<FavoriteStudentDialog> {
),
],
),
SizedBox(height: 10.r,),
SizedBox(
height: 10.r,
),
imageList.length>0?
Expanded(
child: Container(
color:Color(0xFF868686),
color: Colors.white,
width: MediaQuery.of(context).size.width,
/* child: PhotoViewGallery.builder(
child: PhotoViewGallery.builder(
scrollPhysics: const BouncingScrollPhysics(),
builder: (BuildContext context, int index) {
builder: (BuildContext context, int index) {
final Items item = imageList[index];
return PhotoViewGalleryPageOptions(
imageProvider: NetworkImage(widget.imageItems[index]),
imageProvider: NetworkImage(item.questionPicture),
heroAttributes: PhotoViewHeroAttributes(tag: item.id),
);
},
itemCount: 2,
pageController:PageController(initialPage: defaultIndex),
// onPageChanged: (){},
itemCount: imageList.length,
pageController: pageController,
onPageChanged: (index) {
setState(() {
defaultIndex = index;
currentStudent = imageList[index];
});
},
scrollDirection: Axis.horizontal,
),*/
),
),
):Padding(
padding: EdgeInsets.only(top: MediaQuery.of(context).size.height/2 - 200.r),
child: MyEmptyWidget(),
),
if(imageList.length>0)
Padding(
padding:EdgeInsets.symmetric(vertical: 15.r),
padding: EdgeInsets.symmetric(vertical: 15.r),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Container(
width: (MediaQuery.of(context).size.width - 78.r)/2 - 10.r,
height: 28.r,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(6.r)),
border: Border.all(width: 1.r,color: Color(0xFFCACACA),style: BorderStyle.solid),
InkWell(
onTap: () {
if (defaultIndex > 0) {
setState(() {
defaultIndex = defaultIndex - 1;
pageController.jumpToPage(defaultIndex);
});
}
},
child: Container(
width:
(MediaQuery.of(context).size.width - 78.r) / 2 - 10.r,
height: 28.r,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(6.r)),
border: Border.all(
width: 1.r,
color: Color(0xFFCACACA),
style: BorderStyle.solid),
),
child: Center(
child: Text(
'上一页',
style: TextStyle(
fontSize: 10.r,
color: defaultIndex == 0
? Color(0xFFCACACA)
: Color(0xFF505E6E)),
)),
),
child: Center(child: Text('上一页',style: TextStyle(fontSize: 10.r,color: Color(0xFF505E6E)),)),
),
Container(
width: (MediaQuery.of(context).size.width - 78.r)/2 - 10.r,
height: 28.r,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(6.r)),
border: Border.all(width: 1.r,color: Color(0xFFCACACA),style: BorderStyle.solid),
InkWell(
onTap: () {
if (defaultIndex < imageList.length - 1) {
setState(() {
defaultIndex = defaultIndex + 1;
pageController.jumpToPage(defaultIndex);
});
}
},
child: Container(
width:
(MediaQuery.of(context).size.width - 78.r) / 2 - 10.r,
height: 28.r,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(6.r)),
border: Border.all(
width: 1.r,
color: Color(0xFFCACACA),
style: BorderStyle.solid),
),
child: Center(
child: Text(
'下一页',
style: TextStyle(
fontSize: 10.r,
color: defaultIndex == imageList.length - 1
? Color(0xFFCACACA)
: Color(0xFF505E6E)),
)),
),
child: Center(child: Text('下一页',style: TextStyle(fontSize: 10.r,color: Color(0xFF505E6E)),)),
),
],
),

View File

@ -9,6 +9,7 @@ import 'package:marking_app/common/model/job/job_fav_student.dart';
import 'package:marking_app/common/model/job/job_favorite_item_model.dart';
import 'package:marking_app/common/model/job/job_report_join_class.dart';
import 'package:marking_app/pages/homework_correction/pages/favorite_student_dialog.dart';
import 'package:marking_app/utils/easy_refresh/MyEmptyWidget.dart';
import 'package:marking_app/utils/index.dart';
import 'package:marking_app/utils/my_text.dart';
import 'package:marking_app/utils/request/rest_client.dart';
@ -61,7 +62,7 @@ class _JobFavoriteState extends State<JobFavorite> with CommonMixin {
Future<List<Items>> getData() async {
var _client = await getClient();
var result =
await _client.getListOfJobFavorites(widget.jobId, widget.jobName, widget.className, loginName, pageSize);
await _client.getListOfJobFavorites(widget.jobId, widget.jobName, widget.className, pageSize);
return result.data!.items;
}
@ -89,20 +90,30 @@ class _JobFavoriteState extends State<JobFavorite> with CommonMixin {
});
}, mounted);
}
print('involveClasses=${involveClasses!.length}');
_future = getData();
} catch (e) {
print(e);
}
}
void showStudentDialog(BuildContext context) {
deleteFav(Items student) async{
RestClient _client = await getClient();
BaseStructureResult res = await _client.getJobDeFavorites(widget.jobId,student.studentId,student.questionPage);
if(res.success){
_future = getData();
setState(() {
});
}
}
void showStudentDialog(BuildContext context,Items item,List groups) {
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
insetPadding: EdgeInsets.all(25.r),
content: FavoriteStudentDialog(),
content: FavoriteStudentDialog(item: item,group: groups, deleteFav: deleteFav,),
contentPadding: EdgeInsets.all(0),
shape: RoundedRectangleBorder(borderRadius: BorderRadius.all(Radius.circular(15.r))));
},
@ -127,17 +138,17 @@ class _JobFavoriteState extends State<JobFavorite> with CommonMixin {
context,
_future,
(List<Items>? datas) {
/* if (datas == null)
if (datas == null)
return Container(
child: Center(
child: quickText('请求错误'),
),
);*/
print('datas${datas}');
);
List pageList = [];
List groupList = [];
String name = '';
if (datas!.length > 0) {
name = datas[0].jobName;
for (var item in datas) {
pageList.add(item.questionPage);
}
@ -147,8 +158,8 @@ class _JobFavoriteState extends State<JobFavorite> with CommonMixin {
var printList = datas.where((element) => element.questionPage == page).toList();
groupList.add({"questionPage": page, "list": printList});
}
groupList.sort((a, b) => a['questionPage'].compareTo(b['questionPage']));
}
return Container(
child: Column(
children: [
@ -158,7 +169,7 @@ class _JobFavoriteState extends State<JobFavorite> with CommonMixin {
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'函数A的对称性研究',
name,
style: TextStyle(fontSize: 14.sp, color: Color(0xFF3C3C3C)),
),
//
@ -186,74 +197,84 @@ class _JobFavoriteState extends State<JobFavorite> with CommonMixin {
color: Color(0xFFCCCCCC),
),
),
groupList.length>0?
Expanded(
child: isPadFlag
? Padding(
padding: EdgeInsets.only(top: 10.r, bottom: 8.r, left: 14.r, right: 14.r),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: EdgeInsets.only(bottom: 5.r),
child: Text(
'第六题',
style: TextStyle(fontSize: 14.sp, color: Color(0xFF2E5BFF)),
),
),
GridView(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
mainAxisSpacing: 8.r,
crossAxisSpacing: 10.r,
childAspectRatio: 556 / 112,
),
shrinkWrap: true,
children: List.generate(groupList.length, (index) {
var item = groupList[index];
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
padding: EdgeInsets.symmetric(vertical: 5.r, horizontal: 10.r),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.all(Radius.circular(6.r)),
),
child: InkWell(
onTap: () {
showStudentDialog(context);
},
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
quickText('张小凡', color: Color(0xFF333333), size: 12.sp),
Expanded(child: Container()),
Padding(
padding: EdgeInsets.only(right: 8.r),
child: Text(
'12班',
style: TextStyle(fontSize: 12.sp, color: Color(0xFF666666)),
),
),
InkWell(
onTap: () async {
print('删除');
},
child: Image.asset(
'assets/images/favorite_delete_icon.png',
width: 26.r,
height: 26.r,
),
),
],
),
Padding(
padding: EdgeInsets.only(bottom: 5.r),
child: Text(
'${item['questionPage']}',
style: TextStyle(fontSize: 14.sp, color: Color(0xFF2E5BFF)),
),
),
GridView(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
mainAxisSpacing: 8.r,
crossAxisSpacing: 10.r,
childAspectRatio: 556 / 112,
),
shrinkWrap: true,
children: List.generate(item['list'].length, (i){
Items student = item['list'][i];
return Container(
padding: EdgeInsets.symmetric(vertical: 5.r, horizontal: 10.r),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.all(Radius.circular(6.r)),
),
child: InkWell(
onTap: () {
showStudentDialog(context,student,groupList);
},
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
quickText(student.studentName, color: Color(0xFF333333), size: 12.sp),
Expanded(child: Container()),
Padding(
padding: EdgeInsets.only(right: 8.r),
child: Text(
student.className,
style: TextStyle(fontSize: 12.sp, color: Color(0xFF666666)),
),
),
InkWell(
onTap: () async {
deleteFav(student);
},
child: Image.asset(
'assets/images/favorite_delete_icon.png',
width: 26.r,
height: 26.r,
),
),
],
),
),
);
})
),
],
),
],
);
})
),
)
: ListView.builder(
shrinkWrap: true,
itemBuilder: (context, index) {
// Items item = datas[index];
var item = groupList[index];
return Padding(
padding: EdgeInsets.only(top: 10.r, bottom: 8.r, left: 14.r, right: 14.r),
child: Column(
@ -262,47 +283,61 @@ class _JobFavoriteState extends State<JobFavorite> with CommonMixin {
Padding(
padding: EdgeInsets.only(bottom: 5.r),
child: Text(
'六题',
'${item['questionPage']}',
style: TextStyle(fontSize: 14.sp, color: Color(0xFF2E5BFF)),
),
),
Container(
padding: EdgeInsets.symmetric(vertical: 5.r, horizontal: 10.r),
margin: EdgeInsets.only(top: 5.r),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.all(Radius.circular(6.r)),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
quickText('张小凡', color: Color(0xFF333333), size: 14.sp),
Expanded(child: Container()),
Padding(
padding: EdgeInsets.only(right: 8.r),
child: Text(
'12班',
style: TextStyle(fontSize: 14.sp, color: Color(0xFF666666)),
),
ListView.builder(
itemBuilder: (context,i){
Items student = item['list'][i];
return InkWell(
onTap: (){
showStudentDialog(context,student,groupList);
},
child: Container(
padding: EdgeInsets.symmetric(vertical: 5.r, horizontal: 10.r),
margin: EdgeInsets.only(top: 5.r),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.all(Radius.circular(6.r)),
),
InkWell(
onTap: () async {},
child: Image.asset(
'assets/images/favorite_delete_icon.png',
width: 32.r,
height: 32.r,
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
quickText(student.studentName, color: Color(0xFF333333), size: 14.sp),
Expanded(child: Container()),
Padding(
padding: EdgeInsets.only(right: 8.r),
child: Text(
student.className,
style: TextStyle(fontSize: 14.sp, color: Color(0xFF666666)),
),
),
InkWell(
onTap: () async {
deleteFav(student);
},
child: Image.asset(
'assets/images/favorite_delete_icon.png',
width: 32.r,
height: 32.r,
),
),
],
),
],
),
),
),
);
},itemCount: item['list'].length,shrinkWrap: true,),
],
),
);
},
// itemCount: datas.length,
itemCount: 10,
itemCount: groupList.length,
),
):Padding(
padding: EdgeInsets.only(top: MediaQuery.of(context).size.height/2 - 200.r),
child: MyEmptyWidget(),
),
],
));

View File

@ -309,7 +309,6 @@ abstract class RestClient {
@the_retrofit.Query("JobId") int jobId,
@the_retrofit.Query("JobName") String jobName,
@the_retrofit.Query("className") String className,
@the_retrofit.Query("Account") String loginName,
@the_retrofit.Query("PageSize") int pageSize,
);
@ -340,4 +339,10 @@ abstract class RestClient {
// => /
@the_retrofit.POST("/api/read/jc-job-read-level")
Future<BaseStructureResult> getSetJobReadLevel(@the_retrofit.Body() JobLevelSetParams params);
// =>
@the_retrofit.POST("/api/jobs/de-fav-student-job")
Future<BaseStructureResult> getJobDeFavorites(
@the_retrofit.Field("jobId") int jobId, @the_retrofit.Field("studentId") int studentId,@the_retrofit.Field("questionPage") int questionPage);
}