Compare commits
No commits in common. "d93a203ee68baa1905eae24828a0ac7b60c3f117" and "8d27f763115fd630b5365478f1b696581d7ff957" have entirely different histories.
d93a203ee6
...
8d27f76311
|
|
@ -49,5 +49,3 @@ making_school_asignment_app/lib/common/api/retrofit_client.g.dart
|
||||||
making_school_asignment_app/lib/page/home_page/children/read_over/read_over_view.g.dart
|
making_school_asignment_app/lib/page/home_page/children/read_over/read_over_view.g.dart
|
||||||
making_school_asignment_app/lib/page/home_page/children/read_over/read_over_view.g.dart
|
making_school_asignment_app/lib/page/home_page/children/read_over/read_over_view.g.dart
|
||||||
making_school_asignment_app/lib/page/home_page/children/read_over/read_over_view.g.dart
|
making_school_asignment_app/lib/page/home_page/children/read_over/read_over_view.g.dart
|
||||||
making_school_asignment_app/lib/common/api/retrofit_client.g.dart
|
|
||||||
making_school_asignment_app/lib/page/home_page/children/read_over/read_over_view.g.dart
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,678 @@
|
||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
|
||||||
|
part of 'retrofit_client.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// RetrofitGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
// ignore_for_file: unnecessary_brace_in_string_interps,no_leading_underscores_for_local_identifiers
|
||||||
|
|
||||||
|
class _RetrofitClient implements RetrofitClient {
|
||||||
|
_RetrofitClient(
|
||||||
|
this._dio, {
|
||||||
|
this.baseUrl,
|
||||||
|
});
|
||||||
|
|
||||||
|
final Dio _dio;
|
||||||
|
|
||||||
|
String? baseUrl;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<BasePageData<AppVersionModel>?> getAppVersions(
|
||||||
|
BaseAppVersion appVersion) async {
|
||||||
|
final _extra = <String, dynamic>{};
|
||||||
|
final queryParameters = <String, dynamic>{};
|
||||||
|
final _headers = <String, dynamic>{};
|
||||||
|
final _data = <String, dynamic>{};
|
||||||
|
_data.addAll(appVersion.toJson());
|
||||||
|
final _result = await _dio.fetch<Map<String, dynamic>?>(
|
||||||
|
_setStreamType<BasePageData<AppVersionModel>>(Options(
|
||||||
|
method: 'POST',
|
||||||
|
headers: _headers,
|
||||||
|
extra: _extra,
|
||||||
|
)
|
||||||
|
.compose(
|
||||||
|
_dio.options,
|
||||||
|
'/api/infra/AppVersion/GetList',
|
||||||
|
queryParameters: queryParameters,
|
||||||
|
data: _data,
|
||||||
|
)
|
||||||
|
.copyWith(
|
||||||
|
baseUrl: _combineBaseUrls(
|
||||||
|
_dio.options.baseUrl,
|
||||||
|
baseUrl,
|
||||||
|
))));
|
||||||
|
final value = _result.data == null
|
||||||
|
? null
|
||||||
|
: BasePageData<AppVersionModel>.fromJson(
|
||||||
|
_result.data!,
|
||||||
|
(json) => AppVersionModel.fromJson(json as Map<String, dynamic>),
|
||||||
|
);
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<dynamic> toLogin(
|
||||||
|
String account,
|
||||||
|
String password,
|
||||||
|
) async {
|
||||||
|
final _extra = <String, dynamic>{};
|
||||||
|
final queryParameters = <String, dynamic>{};
|
||||||
|
final _headers = <String, dynamic>{};
|
||||||
|
final _data = {
|
||||||
|
'account': account,
|
||||||
|
'password': password,
|
||||||
|
};
|
||||||
|
final _result = await _dio.fetch(_setStreamType<dynamic>(Options(
|
||||||
|
method: 'POST',
|
||||||
|
headers: _headers,
|
||||||
|
extra: _extra,
|
||||||
|
)
|
||||||
|
.compose(
|
||||||
|
_dio.options,
|
||||||
|
'/api/rbac/Auth/DcLogin',
|
||||||
|
queryParameters: queryParameters,
|
||||||
|
data: _data,
|
||||||
|
)
|
||||||
|
.copyWith(
|
||||||
|
baseUrl: _combineBaseUrls(
|
||||||
|
_dio.options.baseUrl,
|
||||||
|
baseUrl,
|
||||||
|
))));
|
||||||
|
final value = _result.data;
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<UserInfoDetail?> getUser(String userId) async {
|
||||||
|
final _extra = <String, dynamic>{};
|
||||||
|
final queryParameters = <String, dynamic>{r'userId': userId};
|
||||||
|
final _headers = <String, dynamic>{};
|
||||||
|
const Map<String, dynamic>? _data = null;
|
||||||
|
final _result = await _dio
|
||||||
|
.fetch<Map<String, dynamic>?>(_setStreamType<UserInfoDetail>(Options(
|
||||||
|
method: 'GET',
|
||||||
|
headers: _headers,
|
||||||
|
extra: _extra,
|
||||||
|
)
|
||||||
|
.compose(
|
||||||
|
_dio.options,
|
||||||
|
'/api/rbac/User/GetUser',
|
||||||
|
queryParameters: queryParameters,
|
||||||
|
data: _data,
|
||||||
|
)
|
||||||
|
.copyWith(
|
||||||
|
baseUrl: _combineBaseUrls(
|
||||||
|
_dio.options.baseUrl,
|
||||||
|
baseUrl,
|
||||||
|
))));
|
||||||
|
final value =
|
||||||
|
_result.data == null ? null : UserInfoDetail.fromJson(_result.data!);
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<WorkStudent> getWorkList(WorkStudentParams params) async {
|
||||||
|
final _extra = <String, dynamic>{};
|
||||||
|
final queryParameters = <String, dynamic>{};
|
||||||
|
queryParameters.addAll(params.toJson());
|
||||||
|
final _headers = <String, dynamic>{};
|
||||||
|
const Map<String, dynamic>? _data = null;
|
||||||
|
final _result = await _dio
|
||||||
|
.fetch<Map<String, dynamic>>(_setStreamType<WorkStudent>(Options(
|
||||||
|
method: 'GET',
|
||||||
|
headers: _headers,
|
||||||
|
extra: _extra,
|
||||||
|
)
|
||||||
|
.compose(
|
||||||
|
_dio.options,
|
||||||
|
'/api/hms/Homework/GetList',
|
||||||
|
queryParameters: queryParameters,
|
||||||
|
data: _data,
|
||||||
|
)
|
||||||
|
.copyWith(
|
||||||
|
baseUrl: _combineBaseUrls(
|
||||||
|
_dio.options.baseUrl,
|
||||||
|
baseUrl,
|
||||||
|
))));
|
||||||
|
final value = WorkStudent.fromJson(_result.data!);
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<Map<String, List<EnumSubject>>> getEnumSubjectList(
|
||||||
|
List<dynamic> enumNames) async {
|
||||||
|
final _extra = <String, dynamic>{};
|
||||||
|
final queryParameters = <String, dynamic>{r'enumNames': enumNames};
|
||||||
|
final _headers = <String, dynamic>{};
|
||||||
|
const Map<String, dynamic>? _data = null;
|
||||||
|
final _result = await _dio.fetch<Map<String, dynamic>>(
|
||||||
|
_setStreamType<Map<String, List<EnumSubject>>>(Options(
|
||||||
|
method: 'GET',
|
||||||
|
headers: _headers,
|
||||||
|
extra: _extra,
|
||||||
|
)
|
||||||
|
.compose(
|
||||||
|
_dio.options,
|
||||||
|
'/api/app/Common/GetEnumInfos',
|
||||||
|
queryParameters: queryParameters,
|
||||||
|
data: _data,
|
||||||
|
)
|
||||||
|
.copyWith(
|
||||||
|
baseUrl: _combineBaseUrls(
|
||||||
|
_dio.options.baseUrl,
|
||||||
|
baseUrl,
|
||||||
|
))));
|
||||||
|
var value = _result.data!.map((k, dynamic v) => MapEntry(
|
||||||
|
k,
|
||||||
|
(v as List)
|
||||||
|
.map((i) => EnumSubject.fromJson(i as Map<String, dynamic>))
|
||||||
|
.toList()));
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<List<ClassItem>> getStudentClass() async {
|
||||||
|
final _extra = <String, dynamic>{};
|
||||||
|
final queryParameters = <String, dynamic>{};
|
||||||
|
final _headers = <String, dynamic>{};
|
||||||
|
const Map<String, dynamic>? _data = null;
|
||||||
|
final _result =
|
||||||
|
await _dio.fetch<List<dynamic>>(_setStreamType<List<ClassItem>>(Options(
|
||||||
|
method: 'GET',
|
||||||
|
headers: _headers,
|
||||||
|
extra: _extra,
|
||||||
|
)
|
||||||
|
.compose(
|
||||||
|
_dio.options,
|
||||||
|
'/api/rbac/SchoolUser/GetTeacherClassSubject',
|
||||||
|
queryParameters: queryParameters,
|
||||||
|
data: _data,
|
||||||
|
)
|
||||||
|
.copyWith(
|
||||||
|
baseUrl: _combineBaseUrls(
|
||||||
|
_dio.options.baseUrl,
|
||||||
|
baseUrl,
|
||||||
|
))));
|
||||||
|
var value = _result.data!
|
||||||
|
.map((dynamic i) => ClassItem.fromJson(i as Map<String, dynamic>))
|
||||||
|
.toList();
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<List<StudentItem>> getStudentList(
|
||||||
|
String classId,
|
||||||
|
int subject,
|
||||||
|
) async {
|
||||||
|
final _extra = <String, dynamic>{};
|
||||||
|
final queryParameters = <String, dynamic>{
|
||||||
|
r'ClassId': classId,
|
||||||
|
r'Subject': subject,
|
||||||
|
};
|
||||||
|
final _headers = <String, dynamic>{};
|
||||||
|
const Map<String, dynamic>? _data = null;
|
||||||
|
final _result = await _dio
|
||||||
|
.fetch<List<dynamic>>(_setStreamType<List<StudentItem>>(Options(
|
||||||
|
method: 'GET',
|
||||||
|
headers: _headers,
|
||||||
|
extra: _extra,
|
||||||
|
)
|
||||||
|
.compose(
|
||||||
|
_dio.options,
|
||||||
|
'/api/rbac/Student/GetPriorityAnnotateStudents',
|
||||||
|
queryParameters: queryParameters,
|
||||||
|
data: _data,
|
||||||
|
)
|
||||||
|
.copyWith(
|
||||||
|
baseUrl: _combineBaseUrls(
|
||||||
|
_dio.options.baseUrl,
|
||||||
|
baseUrl,
|
||||||
|
))));
|
||||||
|
var value = _result.data!
|
||||||
|
.map((dynamic i) => StudentItem.fromJson(i as Map<String, dynamic>))
|
||||||
|
.toList();
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<WorkStudent> getUnAnnotateList(WorkStudentParams params) async {
|
||||||
|
final _extra = <String, dynamic>{};
|
||||||
|
final queryParameters = <String, dynamic>{};
|
||||||
|
queryParameters.addAll(params.toJson());
|
||||||
|
final _headers = <String, dynamic>{};
|
||||||
|
const Map<String, dynamic>? _data = null;
|
||||||
|
final _result = await _dio
|
||||||
|
.fetch<Map<String, dynamic>>(_setStreamType<WorkStudent>(Options(
|
||||||
|
method: 'GET',
|
||||||
|
headers: _headers,
|
||||||
|
extra: _extra,
|
||||||
|
)
|
||||||
|
.compose(
|
||||||
|
_dio.options,
|
||||||
|
'/api/hms/Annotate/GetUnAnnotateList',
|
||||||
|
queryParameters: queryParameters,
|
||||||
|
data: _data,
|
||||||
|
)
|
||||||
|
.copyWith(
|
||||||
|
baseUrl: _combineBaseUrls(
|
||||||
|
_dio.options.baseUrl,
|
||||||
|
baseUrl,
|
||||||
|
))));
|
||||||
|
final value = WorkStudent.fromJson(_result.data!);
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<WorkStudent> getAnnotatedList(WorkStudentParams params) async {
|
||||||
|
final _extra = <String, dynamic>{};
|
||||||
|
final queryParameters = <String, dynamic>{};
|
||||||
|
queryParameters.addAll(params.toJson());
|
||||||
|
final _headers = <String, dynamic>{};
|
||||||
|
const Map<String, dynamic>? _data = null;
|
||||||
|
final _result = await _dio
|
||||||
|
.fetch<Map<String, dynamic>>(_setStreamType<WorkStudent>(Options(
|
||||||
|
method: 'GET',
|
||||||
|
headers: _headers,
|
||||||
|
extra: _extra,
|
||||||
|
)
|
||||||
|
.compose(
|
||||||
|
_dio.options,
|
||||||
|
'/api/hms/Annotate/GetAnnotatedList',
|
||||||
|
queryParameters: queryParameters,
|
||||||
|
data: _data,
|
||||||
|
)
|
||||||
|
.copyWith(
|
||||||
|
baseUrl: _combineBaseUrls(
|
||||||
|
_dio.options.baseUrl,
|
||||||
|
baseUrl,
|
||||||
|
))));
|
||||||
|
final value = WorkStudent.fromJson(_result.data!);
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<List<AnnotatedClass>> getAnnotatedClassList(String homeworkId) async {
|
||||||
|
final _extra = <String, dynamic>{};
|
||||||
|
final queryParameters = <String, dynamic>{r'homeworkId': homeworkId};
|
||||||
|
final _headers = <String, dynamic>{};
|
||||||
|
const Map<String, dynamic>? _data = null;
|
||||||
|
final _result = await _dio
|
||||||
|
.fetch<List<dynamic>>(_setStreamType<List<AnnotatedClass>>(Options(
|
||||||
|
method: 'GET',
|
||||||
|
headers: _headers,
|
||||||
|
extra: _extra,
|
||||||
|
)
|
||||||
|
.compose(
|
||||||
|
_dio.options,
|
||||||
|
'/api/hms/Annotate/Get',
|
||||||
|
queryParameters: queryParameters,
|
||||||
|
data: _data,
|
||||||
|
)
|
||||||
|
.copyWith(
|
||||||
|
baseUrl: _combineBaseUrls(
|
||||||
|
_dio.options.baseUrl,
|
||||||
|
baseUrl,
|
||||||
|
))));
|
||||||
|
var value = _result.data!
|
||||||
|
.map((dynamic i) => AnnotatedClass.fromJson(i as Map<String, dynamic>))
|
||||||
|
.toList();
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<HomeworkDetails> getHomeworkDetails(
|
||||||
|
String homeworkId,
|
||||||
|
String classId,
|
||||||
|
) async {
|
||||||
|
final _extra = <String, dynamic>{};
|
||||||
|
final queryParameters = <String, dynamic>{
|
||||||
|
r'homeworkId': homeworkId,
|
||||||
|
r'classId': classId,
|
||||||
|
};
|
||||||
|
final _headers = <String, dynamic>{};
|
||||||
|
const Map<String, dynamic>? _data = null;
|
||||||
|
final _result = await _dio
|
||||||
|
.fetch<Map<String, dynamic>>(_setStreamType<HomeworkDetails>(Options(
|
||||||
|
method: 'GET',
|
||||||
|
headers: _headers,
|
||||||
|
extra: _extra,
|
||||||
|
)
|
||||||
|
.compose(
|
||||||
|
_dio.options,
|
||||||
|
'/api/hms/HmsReport/GetHomeworkDtls',
|
||||||
|
queryParameters: queryParameters,
|
||||||
|
data: _data,
|
||||||
|
)
|
||||||
|
.copyWith(
|
||||||
|
baseUrl: _combineBaseUrls(
|
||||||
|
_dio.options.baseUrl,
|
||||||
|
baseUrl,
|
||||||
|
))));
|
||||||
|
final value = HomeworkDetails.fromJson(_result.data!);
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<StudentHistory> getStudentHistory(StudentHistoryParams params) async {
|
||||||
|
final _extra = <String, dynamic>{};
|
||||||
|
final queryParameters = <String, dynamic>{};
|
||||||
|
queryParameters.addAll(params.toJson());
|
||||||
|
final _headers = <String, dynamic>{};
|
||||||
|
const Map<String, dynamic>? _data = null;
|
||||||
|
final _result = await _dio
|
||||||
|
.fetch<Map<String, dynamic>>(_setStreamType<StudentHistory>(Options(
|
||||||
|
method: 'GET',
|
||||||
|
headers: _headers,
|
||||||
|
extra: _extra,
|
||||||
|
)
|
||||||
|
.compose(
|
||||||
|
_dio.options,
|
||||||
|
'/api/hms/HmsReport/GetStudentHistory',
|
||||||
|
queryParameters: queryParameters,
|
||||||
|
data: _data,
|
||||||
|
)
|
||||||
|
.copyWith(
|
||||||
|
baseUrl: _combineBaseUrls(
|
||||||
|
_dio.options.baseUrl,
|
||||||
|
baseUrl,
|
||||||
|
))));
|
||||||
|
final value = StudentHistory.fromJson(_result.data!);
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<dynamic> getAnnotateStudent(
|
||||||
|
String classId,
|
||||||
|
int studentId,
|
||||||
|
bool priorityAnnotate,
|
||||||
|
int subject,
|
||||||
|
) async {
|
||||||
|
final _extra = <String, dynamic>{};
|
||||||
|
final queryParameters = <String, dynamic>{};
|
||||||
|
final _headers = <String, dynamic>{};
|
||||||
|
final _data = {
|
||||||
|
'classId': classId,
|
||||||
|
'studentId': studentId,
|
||||||
|
'priorityAnnotate': priorityAnnotate,
|
||||||
|
'subject': subject,
|
||||||
|
};
|
||||||
|
final _result = await _dio.fetch(_setStreamType<dynamic>(Options(
|
||||||
|
method: 'POST',
|
||||||
|
headers: _headers,
|
||||||
|
extra: _extra,
|
||||||
|
)
|
||||||
|
.compose(
|
||||||
|
_dio.options,
|
||||||
|
'/api/rbac/Student/PriorityAnnotateStudent',
|
||||||
|
queryParameters: queryParameters,
|
||||||
|
data: _data,
|
||||||
|
)
|
||||||
|
.copyWith(
|
||||||
|
baseUrl: _combineBaseUrls(
|
||||||
|
_dio.options.baseUrl,
|
||||||
|
baseUrl,
|
||||||
|
))));
|
||||||
|
final value = _result.data;
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<StudentPersonalInfo> getStudentHomework(
|
||||||
|
String homeworkId,
|
||||||
|
int studentId,
|
||||||
|
) async {
|
||||||
|
final _extra = <String, dynamic>{};
|
||||||
|
final queryParameters = <String, dynamic>{
|
||||||
|
r'HomeworkId': homeworkId,
|
||||||
|
r'StudentId': studentId,
|
||||||
|
};
|
||||||
|
final _headers = <String, dynamic>{};
|
||||||
|
const Map<String, dynamic>? _data = null;
|
||||||
|
final _result = await _dio.fetch<Map<String, dynamic>>(
|
||||||
|
_setStreamType<StudentPersonalInfo>(Options(
|
||||||
|
method: 'GET',
|
||||||
|
headers: _headers,
|
||||||
|
extra: _extra,
|
||||||
|
)
|
||||||
|
.compose(
|
||||||
|
_dio.options,
|
||||||
|
'/api/hms/HmsReport/GetStudentHomework',
|
||||||
|
queryParameters: queryParameters,
|
||||||
|
data: _data,
|
||||||
|
)
|
||||||
|
.copyWith(
|
||||||
|
baseUrl: _combineBaseUrls(
|
||||||
|
_dio.options.baseUrl,
|
||||||
|
baseUrl,
|
||||||
|
))));
|
||||||
|
final value = StudentPersonalInfo.fromJson(_result.data!);
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<List<KnowledgePointsGrasp>> getKnowledgeReport(
|
||||||
|
String dateStart,
|
||||||
|
String dateEnd,
|
||||||
|
String knowledgeName,
|
||||||
|
) async {
|
||||||
|
final _extra = <String, dynamic>{};
|
||||||
|
final queryParameters = <String, dynamic>{
|
||||||
|
r'DateStart': dateStart,
|
||||||
|
r'DateEnd': dateEnd,
|
||||||
|
r'KnowledgeName': knowledgeName,
|
||||||
|
};
|
||||||
|
final _headers = <String, dynamic>{};
|
||||||
|
const Map<String, dynamic>? _data = null;
|
||||||
|
final _result = await _dio.fetch<List<dynamic>>(
|
||||||
|
_setStreamType<List<KnowledgePointsGrasp>>(Options(
|
||||||
|
method: 'GET',
|
||||||
|
headers: _headers,
|
||||||
|
extra: _extra,
|
||||||
|
)
|
||||||
|
.compose(
|
||||||
|
_dio.options,
|
||||||
|
'/api/hms/HmsReport/GetKnowledgeReport',
|
||||||
|
queryParameters: queryParameters,
|
||||||
|
data: _data,
|
||||||
|
)
|
||||||
|
.copyWith(
|
||||||
|
baseUrl: _combineBaseUrls(
|
||||||
|
_dio.options.baseUrl,
|
||||||
|
baseUrl,
|
||||||
|
))));
|
||||||
|
var value = _result.data!
|
||||||
|
.map((dynamic i) =>
|
||||||
|
KnowledgePointsGrasp.fromJson(i as Map<String, dynamic>))
|
||||||
|
.toList();
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<List<KnowledgeReportDetail>> getKnowledgeReportDetail(
|
||||||
|
String dateStart,
|
||||||
|
String dateEnd,
|
||||||
|
int knowledgeId,
|
||||||
|
) async {
|
||||||
|
final _extra = <String, dynamic>{};
|
||||||
|
final queryParameters = <String, dynamic>{
|
||||||
|
r'DateStart': dateStart,
|
||||||
|
r'DateEnd': dateEnd,
|
||||||
|
r'KnowledgeId': knowledgeId,
|
||||||
|
};
|
||||||
|
final _headers = <String, dynamic>{};
|
||||||
|
const Map<String, dynamic>? _data = null;
|
||||||
|
final _result = await _dio.fetch<List<dynamic>>(
|
||||||
|
_setStreamType<List<KnowledgeReportDetail>>(Options(
|
||||||
|
method: 'GET',
|
||||||
|
headers: _headers,
|
||||||
|
extra: _extra,
|
||||||
|
)
|
||||||
|
.compose(
|
||||||
|
_dio.options,
|
||||||
|
'/api/hms/HmsReport/GetKnowledgeReportDetail',
|
||||||
|
queryParameters: queryParameters,
|
||||||
|
data: _data,
|
||||||
|
)
|
||||||
|
.copyWith(
|
||||||
|
baseUrl: _combineBaseUrls(
|
||||||
|
_dio.options.baseUrl,
|
||||||
|
baseUrl,
|
||||||
|
))));
|
||||||
|
var value = _result.data!
|
||||||
|
.map((dynamic i) =>
|
||||||
|
KnowledgeReportDetail.fromJson(i as Map<String, dynamic>))
|
||||||
|
.toList();
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<List<Students>> getQuestionStudentState(
|
||||||
|
String homeworkId,
|
||||||
|
int templateId,
|
||||||
|
int questionNo,
|
||||||
|
) async {
|
||||||
|
final _extra = <String, dynamic>{};
|
||||||
|
final queryParameters = <String, dynamic>{
|
||||||
|
r'HomeworkId': homeworkId,
|
||||||
|
r'TemplateId': templateId,
|
||||||
|
r'QuestionNo': questionNo,
|
||||||
|
};
|
||||||
|
final _headers = <String, dynamic>{};
|
||||||
|
const Map<String, dynamic>? _data = null;
|
||||||
|
final _result =
|
||||||
|
await _dio.fetch<List<dynamic>>(_setStreamType<List<Students>>(Options(
|
||||||
|
method: 'GET',
|
||||||
|
headers: _headers,
|
||||||
|
extra: _extra,
|
||||||
|
)
|
||||||
|
.compose(
|
||||||
|
_dio.options,
|
||||||
|
'/api/hms/HmsReport/GetQuestionStudentState',
|
||||||
|
queryParameters: queryParameters,
|
||||||
|
data: _data,
|
||||||
|
)
|
||||||
|
.copyWith(
|
||||||
|
baseUrl: _combineBaseUrls(
|
||||||
|
_dio.options.baseUrl,
|
||||||
|
baseUrl,
|
||||||
|
))));
|
||||||
|
var value = _result.data!
|
||||||
|
.map((dynamic i) => Students.fromJson(i as Map<String, dynamic>))
|
||||||
|
.toList();
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<dynamic> getCollect(String homeworkId) async {
|
||||||
|
final _extra = <String, dynamic>{};
|
||||||
|
final queryParameters = <String, dynamic>{};
|
||||||
|
final _headers = <String, dynamic>{};
|
||||||
|
final _data = {'homeworkId': homeworkId};
|
||||||
|
final _result = await _dio.fetch(_setStreamType<dynamic>(Options(
|
||||||
|
method: 'POST',
|
||||||
|
headers: _headers,
|
||||||
|
extra: _extra,
|
||||||
|
)
|
||||||
|
.compose(
|
||||||
|
_dio.options,
|
||||||
|
'/api/hms/Homework/Collect',
|
||||||
|
queryParameters: queryParameters,
|
||||||
|
data: _data,
|
||||||
|
)
|
||||||
|
.copyWith(
|
||||||
|
baseUrl: _combineBaseUrls(
|
||||||
|
_dio.options.baseUrl,
|
||||||
|
baseUrl,
|
||||||
|
))));
|
||||||
|
final value = _result.data;
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<dynamic> toFavStudent(FavorParam param) async {
|
||||||
|
final _extra = <String, dynamic>{};
|
||||||
|
final queryParameters = <String, dynamic>{};
|
||||||
|
final _headers = <String, dynamic>{};
|
||||||
|
final _data = <String, dynamic>{};
|
||||||
|
_data.addAll(param.toJson());
|
||||||
|
final _result = await _dio.fetch(_setStreamType<dynamic>(Options(
|
||||||
|
method: 'POST',
|
||||||
|
headers: _headers,
|
||||||
|
extra: _extra,
|
||||||
|
)
|
||||||
|
.compose(
|
||||||
|
_dio.options,
|
||||||
|
'/api/hms/FavStudent/FavStudent',
|
||||||
|
queryParameters: queryParameters,
|
||||||
|
data: _data,
|
||||||
|
)
|
||||||
|
.copyWith(
|
||||||
|
baseUrl: _combineBaseUrls(
|
||||||
|
_dio.options.baseUrl,
|
||||||
|
baseUrl,
|
||||||
|
))));
|
||||||
|
final value = _result.data;
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<DoPaperDetailsResult> getDoPaperDetails(
|
||||||
|
DoPaperDetailsParam param) async {
|
||||||
|
final _extra = <String, dynamic>{};
|
||||||
|
final queryParameters = <String, dynamic>{};
|
||||||
|
queryParameters.addAll(param.toJson());
|
||||||
|
final _headers = <String, dynamic>{};
|
||||||
|
const Map<String, dynamic>? _data = null;
|
||||||
|
final _result = await _dio.fetch<Map<String, dynamic>>(
|
||||||
|
_setStreamType<DoPaperDetailsResult>(Options(
|
||||||
|
method: 'GET',
|
||||||
|
headers: _headers,
|
||||||
|
extra: _extra,
|
||||||
|
)
|
||||||
|
.compose(
|
||||||
|
_dio.options,
|
||||||
|
'/api/hms/Annotate/GetForAnnotate',
|
||||||
|
queryParameters: queryParameters,
|
||||||
|
data: _data,
|
||||||
|
)
|
||||||
|
.copyWith(
|
||||||
|
baseUrl: _combineBaseUrls(
|
||||||
|
_dio.options.baseUrl,
|
||||||
|
baseUrl,
|
||||||
|
))));
|
||||||
|
final value = DoPaperDetailsResult.fromJson(_result.data!);
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
RequestOptions _setStreamType<T>(RequestOptions requestOptions) {
|
||||||
|
if (T != dynamic &&
|
||||||
|
!(requestOptions.responseType == ResponseType.bytes ||
|
||||||
|
requestOptions.responseType == ResponseType.stream)) {
|
||||||
|
if (T == String) {
|
||||||
|
requestOptions.responseType = ResponseType.plain;
|
||||||
|
} else {
|
||||||
|
requestOptions.responseType = ResponseType.json;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return requestOptions;
|
||||||
|
}
|
||||||
|
|
||||||
|
String _combineBaseUrls(
|
||||||
|
String dioBaseUrl,
|
||||||
|
String? baseUrl,
|
||||||
|
) {
|
||||||
|
if (baseUrl == null || baseUrl.trim().isEmpty) {
|
||||||
|
return dioBaseUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
final url = Uri.parse(baseUrl);
|
||||||
|
|
||||||
|
if (url.isAbsolute) {
|
||||||
|
return url.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
return Uri.parse(dioBaseUrl).resolveUri(url).toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
import 'package:get/get.dart';
|
|
||||||
import 'package:json_annotation/json_annotation.dart';
|
import 'package:json_annotation/json_annotation.dart';
|
||||||
|
|
||||||
part 'do_paper_details_result.g.dart';
|
part 'do_paper_details_result.g.dart';
|
||||||
|
|
@ -6,15 +5,7 @@ part 'do_paper_details_result.g.dart';
|
||||||
@JsonSerializable(checked: true)
|
@JsonSerializable(checked: true)
|
||||||
class DoPaperDetailsResult extends Object {
|
class DoPaperDetailsResult extends Object {
|
||||||
@JsonKey(name: 'templateIds')
|
@JsonKey(name: 'templateIds')
|
||||||
Map<String, bool> templateIds;
|
Object templateIds;
|
||||||
|
|
||||||
// 自定义字段
|
|
||||||
@JsonKey(name: 'templateIdKeys')
|
|
||||||
List<int>? templateIdKeys;
|
|
||||||
|
|
||||||
// 自定义字段
|
|
||||||
@JsonKey(name: 'templateIdKeyMap')
|
|
||||||
Map<int, int>? templateIdKeyMap;
|
|
||||||
|
|
||||||
@JsonKey(name: 'students')
|
@JsonKey(name: 'students')
|
||||||
List<PaperStudents> students;
|
List<PaperStudents> students;
|
||||||
|
|
@ -25,20 +16,16 @@ class DoPaperDetailsResult extends Object {
|
||||||
@JsonKey(name: 'studentId')
|
@JsonKey(name: 'studentId')
|
||||||
int studentId;
|
int studentId;
|
||||||
|
|
||||||
// 自定义字段
|
@JsonKey(name: 'annotatedCount')
|
||||||
@JsonKey(name: 'priority', defaultValue: false)
|
|
||||||
bool priority;
|
|
||||||
|
|
||||||
@JsonKey(name: 'annotatedCount') // 当前试题批阅数量
|
|
||||||
int annotatedCount;
|
int annotatedCount;
|
||||||
|
|
||||||
@JsonKey(name: 'submitCount') // 当前试题提交数量
|
@JsonKey(name: 'submitCount')
|
||||||
int submitCount;
|
int submitCount;
|
||||||
|
|
||||||
@JsonKey(name: 'zgtAnswer') // 主观题作答图片
|
@JsonKey(name: 'zgtAnswer')
|
||||||
String zgtAnswer;
|
String zgtAnswer;
|
||||||
|
|
||||||
@JsonKey(name: 'zgtAnnotate') // 主观题批注图片
|
@JsonKey(name: 'zgtAnnotate')
|
||||||
String? zgtAnnotate;
|
String? zgtAnnotate;
|
||||||
|
|
||||||
@JsonKey(name: 'lastAnswerTime')
|
@JsonKey(name: 'lastAnswerTime')
|
||||||
|
|
@ -74,26 +61,7 @@ class DoPaperDetailsResult extends Object {
|
||||||
this.unSubmitStudents,
|
this.unSubmitStudents,
|
||||||
this.lastPage,
|
this.lastPage,
|
||||||
this.nextPage,
|
this.nextPage,
|
||||||
this.templateIdKeys,
|
);
|
||||||
this.templateIdKeyMap,
|
|
||||||
this.priority,
|
|
||||||
) {
|
|
||||||
if (templateIds.keys.isNotEmpty) {
|
|
||||||
templateIdKeys = templateIds.keys.map((e) => int.parse(e)).toList();
|
|
||||||
templateIdKeyMap = <int, int>{};
|
|
||||||
for (var i = 1; i <= templateIdKeys!.length; i++) {
|
|
||||||
var theVal = templateIdKeys![i - 1];
|
|
||||||
templateIdKeyMap![i] = theVal;
|
|
||||||
templateIdKeyMap![theVal] = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 找到当前学生是否是优先批阅
|
|
||||||
if (students.isNotEmpty) {
|
|
||||||
var currentStudent = students.firstWhereOrNull((e) => e.id == studentId);
|
|
||||||
if (currentStudent != null) priority = currentStudent.isPriority;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
factory DoPaperDetailsResult.fromJson(Map<String, dynamic> srcJson) => _$DoPaperDetailsResultFromJson(srcJson);
|
factory DoPaperDetailsResult.fromJson(Map<String, dynamic> srcJson) => _$DoPaperDetailsResultFromJson(srcJson);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,11 @@
|
||||||
import 'package:flutter/foundation.dart';
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_screenutil/flutter_screenutil.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.dart';
|
||||||
import 'package:making_school_asignment_app/common/job/marking_models/do_paper_details_param.dart';
|
|
||||||
import 'package:making_school_asignment_app/common/utils/anti_shake_throttling.dart';
|
import 'package:making_school_asignment_app/common/utils/anti_shake_throttling.dart';
|
||||||
import 'package:making_school_asignment_app/common/utils/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/global_widget/my_text.dart';
|
||||||
import 'package:making_school_asignment_app/page/home_page/children/homework_review/configuration_files/index.dart';
|
import 'package:making_school_asignment_app/page/home_page/children/homework_review/configuration_files/index.dart';
|
||||||
|
|
||||||
part 'dropdown_switch_students_type.g.dart';
|
|
||||||
|
|
||||||
/// 学生和页码切换
|
/// 学生和页码切换
|
||||||
class DropdownSwitchStudentsType extends StatefulWidget {
|
class DropdownSwitchStudentsType extends StatefulWidget {
|
||||||
const DropdownSwitchStudentsType({super.key});
|
const DropdownSwitchStudentsType({super.key});
|
||||||
|
|
@ -21,7 +16,7 @@ class DropdownSwitchStudentsType extends StatefulWidget {
|
||||||
|
|
||||||
class _DropdownSwitchStudentsTypeState extends State<DropdownSwitchStudentsType> {
|
class _DropdownSwitchStudentsTypeState extends State<DropdownSwitchStudentsType> {
|
||||||
final logic = Get.find<HomeworkReviewLogic>();
|
final logic = Get.find<HomeworkReviewLogic>();
|
||||||
final sateData = Get.find<HomeworkReviewLogic>().state.data;
|
final sateData = Get.find<HomeworkReviewLogic>().state;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
|
@ -48,28 +43,24 @@ class _DropdownSwitchStudentsTypeState extends State<DropdownSwitchStudentsType>
|
||||||
color: const Color.fromRGBO(244, 244, 244, 1),
|
color: const Color.fromRGBO(244, 244, 244, 1),
|
||||||
borderRadius: BorderRadius.circular(4.r),
|
borderRadius: BorderRadius.circular(4.r),
|
||||||
),
|
),
|
||||||
child: Obx(() {
|
child: DropdownButton(
|
||||||
return DropdownButton(
|
|
||||||
isExpanded: true,
|
isExpanded: true,
|
||||||
underline: Container(),
|
underline: Container(),
|
||||||
padding: EdgeInsets.only(right: 4.w),
|
padding: EdgeInsets.only(right: 4.w),
|
||||||
icon: const Icon(Icons.keyboard_arrow_down_rounded),
|
icon: const Icon(Icons.keyboard_arrow_down_rounded),
|
||||||
value: sateData.value?.templateId, // TODO 数据
|
value: 1, // TODO 数据
|
||||||
hint: const Text('请选择作业页码'), // 锚点的显示文本
|
hint: const Text('请选择作业页码'), // 锚点的显示文本
|
||||||
items: sateData.value?.templateIdKeys?.map((e) {
|
items: [1, 2, 3].map((e) {
|
||||||
|
// 数据
|
||||||
return DropdownMenuItem(
|
return DropdownMenuItem(
|
||||||
value: e,
|
value: e,
|
||||||
child: quickText('${sateData.value!.templateIdKeyMap![e]}页', color: const Color.fromRGBO(79, 79, 79, 1), size: 14.sp),
|
child: quickText('$e页', color: const Color.fromRGBO(79, 79, 79, 1), size: 14.sp),
|
||||||
);
|
);
|
||||||
}).toList(),
|
}).toList(),
|
||||||
onChanged: (value) {
|
onChanged: (value) {
|
||||||
if (logic.state.param.value.templateId == value) return;
|
|
||||||
logic.state.param.value.templateId = value;
|
|
||||||
logic.state.param.value = DoPaperDetailsParam.fromJson(logic.state.param.value.toJson());
|
|
||||||
// _useSwitchStudentAndType.currentTab.value = _useSwitchStudentAndType.tabs.value.firstWhere((element) => element.pageIndex == value);
|
// _useSwitchStudentAndType.currentTab.value = _useSwitchStudentAndType.tabs.value.firstWhere((element) => element.pageIndex == value);
|
||||||
},
|
},
|
||||||
);
|
),
|
||||||
}),
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
const Expanded(flex: 1, child: SizedBox()),
|
const Expanded(flex: 1, child: SizedBox()),
|
||||||
|
|
@ -83,37 +74,42 @@ class _DropdownSwitchStudentsTypeState extends State<DropdownSwitchStudentsType>
|
||||||
color: const Color.fromRGBO(244, 244, 244, 1),
|
color: const Color.fromRGBO(244, 244, 244, 1),
|
||||||
borderRadius: BorderRadius.circular(4.r),
|
borderRadius: BorderRadius.circular(4.r),
|
||||||
),
|
),
|
||||||
child: Obx(() {
|
child: DropdownButton(
|
||||||
return DropdownButton(
|
onTap: () {
|
||||||
|
// 打开的时候请求刷新学生
|
||||||
|
// _useSwitchStudentAndType.getDataForStudents(taskId: taskId);
|
||||||
|
},
|
||||||
padding: EdgeInsets.only(right: 4.w),
|
padding: EdgeInsets.only(right: 4.w),
|
||||||
icon: const Icon(Icons.keyboard_arrow_down_rounded),
|
icon: const Icon(Icons.keyboard_arrow_down_rounded),
|
||||||
value: sateData.value?.studentId,
|
value: '汪杨',
|
||||||
underline: Container(),
|
underline: Container(),
|
||||||
isExpanded: true,
|
isExpanded: true,
|
||||||
items: sateData.value?.students.map((e) {
|
items: ['汪杨'].map((e) {
|
||||||
return DropdownMenuItem(value: e.id, child: quickText(e.name, color: const Color.fromRGBO(79, 79, 79, 1), size: 14.sp));
|
return DropdownMenuItem(
|
||||||
|
value: e,
|
||||||
|
child: quickText(e, color: const Color.fromRGBO(79, 79, 79, 1), size: 14.sp),
|
||||||
|
);
|
||||||
}).toList(),
|
}).toList(),
|
||||||
hint: const Text('请选择学生'), // 锚点的显示文本
|
hint: const Text('请选择学生'), // 锚点的显示文本
|
||||||
onChanged: (value) {
|
onChanged: (value) {
|
||||||
if (logic.state.param.value.studentId == value) return;
|
// JobConcernedWithStudent? currentStudent = _useSwitchStudentAndType.currentStudent.value;
|
||||||
logic.state.param.value.studentId = value;
|
// if (currentStudent?.studentId == value) return;
|
||||||
logic.state.param.value = DoPaperDetailsParam.fromJson(logic.state.param.value.toJson());
|
// _useSwitchStudentAndType.studentBusInfo.value = null; // 置空BUS通知记录
|
||||||
|
// _useSwitchStudentAndType.currentStudent.value =
|
||||||
|
// _useSwitchStudentAndType.studentData.value.firstWhereOrNull((element) => element.studentId == value);
|
||||||
},
|
},
|
||||||
);
|
),
|
||||||
}),
|
|
||||||
),
|
),
|
||||||
Positioned(
|
Positioned(
|
||||||
left: 2.w,
|
left: 2.w,
|
||||||
child: Stack(
|
child: Stack(
|
||||||
alignment: const FractionalOffset(0.52, 0.24),
|
alignment: const FractionalOffset(0.52, 0.24),
|
||||||
children: [
|
children: [
|
||||||
Obx(() {
|
Icon(
|
||||||
return Icon(
|
|
||||||
const IconData(0xe63d, fontFamily: "AlibabaIcon"),
|
const IconData(0xe63d, fontFamily: "AlibabaIcon"),
|
||||||
size: 12.sp,
|
size: 12.sp,
|
||||||
color: sateData.value?.priority ?? false ? const Color.fromRGBO(76, 199, 147, 1) : const Color.fromRGBO(164, 164, 164, 1),
|
color: true ? const Color.fromRGBO(76, 199, 147, 1) : const Color.fromRGBO(164, 164, 164, 1),
|
||||||
);
|
),
|
||||||
}),
|
|
||||||
quickText('优先', size: 4.sp, color: Colors.white),
|
quickText('优先', size: 4.sp, color: Colors.white),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
|
@ -124,82 +120,41 @@ class _DropdownSwitchStudentsTypeState extends State<DropdownSwitchStudentsType>
|
||||||
const Expanded(flex: 1, child: SizedBox()),
|
const Expanded(flex: 1, child: SizedBox()),
|
||||||
Expanded(
|
Expanded(
|
||||||
flex: isPad() ? 4 : 5,
|
flex: isPad() ? 4 : 5,
|
||||||
child: const Row(
|
child: Row(
|
||||||
crossAxisAlignment: CrossAxisAlignment.center,
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
mainAxisAlignment: MainAxisAlignment.end,
|
mainAxisAlignment: MainAxisAlignment.end,
|
||||||
children: [
|
children: [
|
||||||
$ContinueToReview(), // 继续批阅
|
// if (_useSwitchStudentAndType.isFinish.value &&
|
||||||
$HistoryHomework() // 学生历史作业
|
// _useSwitchStudentAndType.tabs.value.firstWhereOrNull((e) => e.finishCount < e.total) != null)
|
||||||
],
|
Expanded(
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@swidget
|
|
||||||
Widget $continueToReview(BuildContext context, {bool isFloatingAction = false}) {
|
|
||||||
final logic = Get.find<HomeworkReviewLogic>();
|
|
||||||
final sateData = Get.find<HomeworkReviewLogic>().state.data;
|
|
||||||
return Obx(() {
|
|
||||||
var data = sateData.value;
|
|
||||||
var param = logic.state.param.value;
|
|
||||||
int? submitCount = data?.submitCount; // 提交数量
|
|
||||||
int? annotatedCount = data?.annotatedCount; // 批阅数量
|
|
||||||
|
|
||||||
if (data == null || (submitCount == annotatedCount || (param.templateId == null && param.studentId == null))) return const SizedBox();
|
|
||||||
callFun() => easyThrottle(
|
|
||||||
'DO_PAPERS_JOB_CONTINUE_TO_REVIEW',
|
|
||||||
() {
|
|
||||||
var param = logic.state.param.value;
|
|
||||||
param.templateId = null;
|
|
||||||
param.studentId = null;
|
|
||||||
logic.state.param.value = DoPaperDetailsParam.fromJson(param.toJson());
|
|
||||||
},
|
|
||||||
);
|
|
||||||
if (isFloatingAction) {
|
|
||||||
return FloatingActionButton(
|
|
||||||
elevation: 8,
|
|
||||||
tooltip: "继续批阅",
|
|
||||||
backgroundColor: Colors.white,
|
|
||||||
onPressed: callFun,
|
|
||||||
child: Icon(Icons.flip_camera_android_outlined, size: 20.sp, color: Theme.of(context).primaryColor),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return Expanded(
|
|
||||||
child: InkWell(
|
|
||||||
onTap: callFun,
|
|
||||||
child: Row(
|
child: Row(
|
||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
crossAxisAlignment: CrossAxisAlignment.center,
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
children: [
|
children: [
|
||||||
Icon(Icons.flip_camera_android_outlined, size: 12.sp, color: Theme.of(context).primaryColor.withOpacity(0.8)),
|
Icon(Icons.flip_camera_android_outlined, size: 10.sp, color: Theme.of(context).primaryColor.withOpacity(0.8)),
|
||||||
SizedBox(width: 1.w),
|
SizedBox(width: 1.w),
|
||||||
quickText(
|
InkWell(
|
||||||
|
onTap: () => easyThrottle(
|
||||||
|
'DO_PAPERS_JOB_CONTINUE_TO_REVIEW',
|
||||||
|
() {
|
||||||
|
// var _currentTabNew = _useSwitchStudentAndType.tabs.value.firstWhere((e) => e.finishCount < e.total);
|
||||||
|
// _useSwitchStudentAndType.eventFire(model: MarkingTextQuestionJobTabParamsBus(taskId, _currentTabNew.pageIndex));
|
||||||
|
},
|
||||||
|
),
|
||||||
|
child: quickText(
|
||||||
'继续批阅',
|
'继续批阅',
|
||||||
size: 10.sp,
|
size: 10.sp,
|
||||||
decoration: TextDecoration.underline,
|
decoration: TextDecoration.underline,
|
||||||
color: Theme.of(context).primaryColor.withOpacity(0.9),
|
color: Theme.of(context).primaryColor.withOpacity(0.9),
|
||||||
),
|
),
|
||||||
|
),
|
||||||
SizedBox(width: 2.w),
|
SizedBox(width: 2.w),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
));
|
),
|
||||||
});
|
Expanded(
|
||||||
}
|
|
||||||
|
|
||||||
// 学生历史作业
|
|
||||||
@swidget
|
|
||||||
Widget $historyHomework(BuildContext context) {
|
|
||||||
final sateData = Get.find<HomeworkReviewLogic>().state.data;
|
|
||||||
return Expanded(
|
|
||||||
child: InkWell(
|
child: InkWell(
|
||||||
onTap: () => easyThrottle('DO_PAPERS_JOB_HISTORICAL_HOMEWORK', () {
|
onTap: () => easyThrottle('DO_PAPERS_JOB_HISTORICAL_HOMEWORK', () {
|
||||||
// TODO 学生历史作业页面跳转
|
|
||||||
int? studentId = sateData.value?.studentId;
|
|
||||||
if (kDebugMode) print(studentId);
|
|
||||||
// JobConcernedWithStudent? _studentModel = _useSwitchStudentAndType.currentStudent.value;
|
// JobConcernedWithStudent? _studentModel = _useSwitchStudentAndType.currentStudent.value;
|
||||||
// if (_studentModel == null) return;
|
// if (_studentModel == null) return;
|
||||||
// String url =
|
// String url =
|
||||||
|
|
@ -220,5 +175,12 @@ Widget $historyHomework(BuildContext context) {
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
);
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -69,13 +69,11 @@ class _FavoriteState extends State<FavoriteWidget> with RequestToolMixin {
|
||||||
child: Row(
|
child: Row(
|
||||||
crossAxisAlignment: CrossAxisAlignment.center,
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
children: [
|
children: [
|
||||||
Obx(() {
|
Icon(
|
||||||
return Icon(
|
|
||||||
const IconData(0xe63c, fontFamily: "AlibabaIcon"),
|
const IconData(0xe63c, fontFamily: "AlibabaIcon"),
|
||||||
size: 18.sp,
|
size: 18.sp,
|
||||||
color: favorite.value ? const Color.fromRGBO(255, 172, 48, 1) : const Color.fromRGBO(164, 164, 164, 1),
|
color: favorite.value ? const Color.fromRGBO(255, 172, 48, 1) : const Color.fromRGBO(164, 164, 164, 1),
|
||||||
);
|
),
|
||||||
}),
|
|
||||||
SizedBox(width: 6.w),
|
SizedBox(width: 6.w),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
|
|
||||||
|
|
@ -1,103 +0,0 @@
|
||||||
import 'package:flutter/material.dart';
|
|
||||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
|
||||||
import 'package:flutter_hooks/flutter_hooks.dart';
|
|
||||||
import 'package:functional_widget_annotation/functional_widget_annotation.dart';
|
|
||||||
import 'package:get/get.dart';
|
|
||||||
import 'package:making_school_asignment_app/common/job/marking_models/do_paper_details_param.dart';
|
|
||||||
import 'package:making_school_asignment_app/common/job/marking_models/do_paper_details_result.dart';
|
|
||||||
import 'package:making_school_asignment_app/common/utils/anti_shake_throttling.dart';
|
|
||||||
import 'package:making_school_asignment_app/page/home_page/children/homework_review/configuration_files/index.dart';
|
|
||||||
|
|
||||||
import 'dropdown_switch_students_type.dart';
|
|
||||||
|
|
||||||
part 'question_paper_view.g.dart';
|
|
||||||
|
|
||||||
// 试题详情
|
|
||||||
class QuestionPaperView extends StatefulWidget {
|
|
||||||
const QuestionPaperView({super.key});
|
|
||||||
|
|
||||||
@override
|
|
||||||
State<QuestionPaperView> createState() => _QuestionPaperViewState();
|
|
||||||
}
|
|
||||||
|
|
||||||
class _QuestionPaperViewState extends State<QuestionPaperView> {
|
|
||||||
final logic = Get.find<HomeworkReviewLogic>();
|
|
||||||
final sateData = Get.find<HomeworkReviewLogic>().state;
|
|
||||||
|
|
||||||
@override
|
|
||||||
Widget build(BuildContext context) {
|
|
||||||
return LayoutBuilder(builder: (BuildContext context, BoxConstraints constraints) {
|
|
||||||
var maxWidth = constraints.maxWidth;
|
|
||||||
var maxHeight = constraints.maxHeight;
|
|
||||||
return Stack(
|
|
||||||
children: [
|
|
||||||
$MainBox(maxWidth, maxHeight),
|
|
||||||
Positioned(
|
|
||||||
left: 3.w,
|
|
||||||
top: (maxHeight / 2) - 20.h,
|
|
||||||
child: Obx(() {
|
|
||||||
LastPage? lastPageVal = sateData.data.value?.lastPage;
|
|
||||||
if (lastPageVal == null) return const SizedBox();
|
|
||||||
|
|
||||||
return FloatingActionButton(
|
|
||||||
heroTag: '点击前往上一题',
|
|
||||||
tooltip: '点击前往上一题',
|
|
||||||
focusColor: Theme.of(context).primaryColor,
|
|
||||||
backgroundColor: const Color.fromRGBO(24, 32, 32, 0.1),
|
|
||||||
elevation: 6.r,
|
|
||||||
onPressed: () => easyThrottle('TestQuestionSwitch', () {
|
|
||||||
var param = sateData.param.value;
|
|
||||||
param.studentId = lastPageVal.studentId;
|
|
||||||
param.templateId = lastPageVal.templateId;
|
|
||||||
sateData.param.value = DoPaperDetailsParam.fromJson(param.toJson());
|
|
||||||
}),
|
|
||||||
child: Icon(Icons.arrow_back_ios, color: Colors.white, size: 22.sp),
|
|
||||||
);
|
|
||||||
}),
|
|
||||||
),
|
|
||||||
Positioned(
|
|
||||||
right: 2.w,
|
|
||||||
top: (maxHeight / 2) - 20.h,
|
|
||||||
child: Obx(() {
|
|
||||||
NextPage? nextPageVal = sateData.data.value?.nextPage;
|
|
||||||
if (nextPageVal == null) return const SizedBox();
|
|
||||||
|
|
||||||
return FloatingActionButton(
|
|
||||||
heroTag: '点击前往下一题',
|
|
||||||
tooltip: '点击前往下一题',
|
|
||||||
elevation: 6.r,
|
|
||||||
backgroundColor: const Color.fromRGBO(24, 32, 32, 0.1),
|
|
||||||
onPressed: () => easyThrottle('TestQuestionSwitch', () {
|
|
||||||
var param = sateData.param.value;
|
|
||||||
param.studentId = nextPageVal.studentId;
|
|
||||||
param.templateId = nextPageVal.templateId;
|
|
||||||
sateData.param.value = DoPaperDetailsParam.fromJson(param.toJson());
|
|
||||||
}),
|
|
||||||
child: Icon(Icons.arrow_forward_ios, color: Colors.white, size: 22.sp),
|
|
||||||
);
|
|
||||||
}),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@hwidget
|
|
||||||
Widget $mainBox(double maxWidth, double maxHeight) {
|
|
||||||
useEffect(() {
|
|
||||||
return () {};
|
|
||||||
}, []);
|
|
||||||
return Stack(
|
|
||||||
alignment: const FractionalOffset(0.94, 0.94),
|
|
||||||
children: [
|
|
||||||
Container(
|
|
||||||
width: maxWidth,
|
|
||||||
height: maxHeight,
|
|
||||||
color: Colors.yellow,
|
|
||||||
),
|
|
||||||
// 继续批阅按钮
|
|
||||||
const $ContinueToReview(isFloatingAction: true)
|
|
||||||
],
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
@ -39,7 +39,6 @@ class HomeworkReviewBinding extends Bindings {
|
||||||
}
|
}
|
||||||
|
|
||||||
class HomeworkReviewLogic extends GetxController with RequestToolMixin {
|
class HomeworkReviewLogic extends GetxController with RequestToolMixin {
|
||||||
late StreamSubscription<DoPaperDetailsParam> _paramListen;
|
|
||||||
final HomeworkReviewState state = HomeworkReviewState();
|
final HomeworkReviewState state = HomeworkReviewState();
|
||||||
final HomeworkReviewAnnotationsControlState annotationState = HomeworkReviewAnnotationsControlState();
|
final HomeworkReviewAnnotationsControlState annotationState = HomeworkReviewAnnotationsControlState();
|
||||||
|
|
||||||
|
|
@ -53,18 +52,10 @@ class HomeworkReviewLogic extends GetxController with RequestToolMixin {
|
||||||
subject: Get.arguments['subject'],
|
subject: Get.arguments['subject'],
|
||||||
).obs;
|
).obs;
|
||||||
state.data = Rx<DoPaperDetailsResult?>(null);
|
state.data = Rx<DoPaperDetailsResult?>(null);
|
||||||
getData();
|
getList();
|
||||||
// 参数变化更新作业详情
|
|
||||||
_paramListen = state.param.listen((e) => getData());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
void getList() async {
|
||||||
void disposeId(Object id) {
|
|
||||||
_paramListen.cancel();
|
|
||||||
super.disposeId(id);
|
|
||||||
}
|
|
||||||
|
|
||||||
void getData() async {
|
|
||||||
var timerControl = Timer(const Duration(milliseconds: 300), () => ToastUtils.showLoading());
|
var timerControl = Timer(const Duration(milliseconds: 300), () => ToastUtils.showLoading());
|
||||||
try {
|
try {
|
||||||
DoPaperDetailsResult? data = await getClient().getDoPaperDetails(state.param.value);
|
DoPaperDetailsResult? data = await getClient().getDoPaperDetails(state.param.value);
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,6 @@ import 'components/bottom_operation_bar.dart';
|
||||||
import 'components/button_floating_action.dart';
|
import 'components/button_floating_action.dart';
|
||||||
import 'components/dropdown_switch_students_type.dart';
|
import 'components/dropdown_switch_students_type.dart';
|
||||||
import 'components/favorite_widget.dart';
|
import 'components/favorite_widget.dart';
|
||||||
import 'components/question_paper_view.dart';
|
|
||||||
import 'configuration_files/index.dart';
|
import 'configuration_files/index.dart';
|
||||||
|
|
||||||
class HomeworkReview extends StatefulWidget {
|
class HomeworkReview extends StatefulWidget {
|
||||||
|
|
@ -41,7 +40,7 @@ class _HomeworkReviewState extends State<HomeworkReview> {
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
// titleSpacing: 0,
|
// titleSpacing: 0,
|
||||||
leading: IconButton(icon: const Icon(Icons.arrow_back_ios), onPressed: () => Get.back()),
|
leading: IconButton(icon: const Icon(Icons.arrow_back_ios), onPressed: () => {}),
|
||||||
iconTheme: const IconThemeData(color: Colors.black),
|
iconTheme: const IconThemeData(color: Colors.black),
|
||||||
title: quickText(sateData.param.value.homeworkName),
|
title: quickText(sateData.param.value.homeworkName),
|
||||||
backgroundColor: Colors.white,
|
backgroundColor: Colors.white,
|
||||||
|
|
@ -58,7 +57,8 @@ class _HomeworkReviewState extends State<HomeworkReview> {
|
||||||
// 下拉切换
|
// 下拉切换
|
||||||
const DropdownSwitchStudentsType(),
|
const DropdownSwitchStudentsType(),
|
||||||
SizedBox(height: 1.h),
|
SizedBox(height: 1.h),
|
||||||
const Expanded(child: QuestionPaperView()),
|
// Expanded(child: ExamPaperAndScoringView(taskId: taskId, className: className)),
|
||||||
|
const Expanded(child: SizedBox()),
|
||||||
const BottomAnnotationSwitch(),
|
const BottomAnnotationSwitch(),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,104 @@
|
||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
|
||||||
|
part of 'read_over_view.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// FunctionalWidgetGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
/// 已阅卷
|
||||||
|
/// OnRefreshCallback? onRefresh
|
||||||
|
///
|
||||||
|
class $EasyRefresh extends StatelessWidget {
|
||||||
|
/// 已阅卷
|
||||||
|
/// OnRefreshCallback? onRefresh
|
||||||
|
///
|
||||||
|
const $EasyRefresh({
|
||||||
|
Key? key,
|
||||||
|
required this.controller,
|
||||||
|
required this.onRefresh,
|
||||||
|
required this.onLoad,
|
||||||
|
required this.data,
|
||||||
|
required this.tab,
|
||||||
|
required this.type,
|
||||||
|
required this.logic,
|
||||||
|
}) : super(key: key);
|
||||||
|
|
||||||
|
/// 已阅卷
|
||||||
|
/// OnRefreshCallback? onRefresh
|
||||||
|
///
|
||||||
|
final EasyRefreshController controller;
|
||||||
|
|
||||||
|
/// 已阅卷
|
||||||
|
/// OnRefreshCallback? onRefresh
|
||||||
|
///
|
||||||
|
final Future<void> Function(
|
||||||
|
EasyRefreshController,
|
||||||
|
int,
|
||||||
|
) onRefresh;
|
||||||
|
|
||||||
|
/// 已阅卷
|
||||||
|
/// OnRefreshCallback? onRefresh
|
||||||
|
///
|
||||||
|
final Future<void> Function(
|
||||||
|
EasyRefreshController,
|
||||||
|
int,
|
||||||
|
) onLoad;
|
||||||
|
|
||||||
|
/// 已阅卷
|
||||||
|
/// OnRefreshCallback? onRefresh
|
||||||
|
///
|
||||||
|
final List<Items> data;
|
||||||
|
|
||||||
|
/// 已阅卷
|
||||||
|
/// OnRefreshCallback? onRefresh
|
||||||
|
///
|
||||||
|
final int tab;
|
||||||
|
|
||||||
|
/// 已阅卷
|
||||||
|
/// OnRefreshCallback? onRefresh
|
||||||
|
///
|
||||||
|
final int type;
|
||||||
|
|
||||||
|
/// 已阅卷
|
||||||
|
/// OnRefreshCallback? onRefresh
|
||||||
|
///
|
||||||
|
final ReadOverLogic logic;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext _context) => $easyRefresh(
|
||||||
|
controller: controller,
|
||||||
|
onRefresh: onRefresh,
|
||||||
|
onLoad: onLoad,
|
||||||
|
data: data,
|
||||||
|
tab: tab,
|
||||||
|
type: type,
|
||||||
|
logic: logic,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
class $ReviewedItem extends StatelessWidget {
|
||||||
|
const $ReviewedItem({
|
||||||
|
Key? key,
|
||||||
|
required this.jobTaskItem,
|
||||||
|
required this.type,
|
||||||
|
required this.subjectName,
|
||||||
|
required this.logic,
|
||||||
|
}) : super(key: key);
|
||||||
|
|
||||||
|
final Items jobTaskItem;
|
||||||
|
|
||||||
|
final int type;
|
||||||
|
|
||||||
|
final String subjectName;
|
||||||
|
|
||||||
|
final ReadOverLogic logic;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext _context) => $reviewedItem(
|
||||||
|
jobTaskItem: jobTaskItem,
|
||||||
|
type: type,
|
||||||
|
subjectName: subjectName,
|
||||||
|
logic: logic,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
@ -350,14 +350,6 @@ packages:
|
||||||
url: "https://pub.flutter-io.cn"
|
url: "https://pub.flutter-io.cn"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.2.2"
|
version: "2.2.2"
|
||||||
flutter_hooks:
|
|
||||||
dependency: "direct main"
|
|
||||||
description:
|
|
||||||
name: flutter_hooks
|
|
||||||
sha256: cde36b12f7188c85286fba9b38cc5a902e7279f36dd676967106c041dc9dde70
|
|
||||||
url: "https://pub.flutter-io.cn"
|
|
||||||
source: hosted
|
|
||||||
version: "0.20.5"
|
|
||||||
flutter_lints:
|
flutter_lints:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description:
|
description:
|
||||||
|
|
|
||||||
|
|
@ -80,7 +80,6 @@ dependencies:
|
||||||
dropdown_button2: ^2.3.9
|
dropdown_button2: ^2.3.9
|
||||||
syncfusion_flutter_datepicker: ^25.2.5
|
syncfusion_flutter_datepicker: ^25.2.5
|
||||||
easy_debounce: ^2.0.3 # 防抖节流
|
easy_debounce: ^2.0.3 # 防抖节流
|
||||||
flutter_hooks: ^0.20.5
|
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue