bug修复:导入课程不全,左右滑动无变化

个人计划显示完成
zhangrenshu
LRC 3 years ago
parent 3caa8daadf
commit b7f39dab8d

@ -61,8 +61,8 @@ class CourseController {
courseId: await idGenerator.generateId(),
teacher: courseForm.getTeacher(),
location: courseForm.getLocation(),
start: startDate,
end: endDate,
startTime: startDate,
endTime: endDate,
credit: courseForm.getCredit(),
remark: courseForm.getNote()
);
@ -87,8 +87,8 @@ class CourseController {
teacher: courseMap['teacher'],
location: courseMap['location'],
remark: courseMap['remark'],
start: DateTime.parse(courseMap['start']),
end: DateTime.parse(courseMap['end']),
startTime: DateTime.parse(courseMap['start']),
endTime: DateTime.parse(courseMap['end']),
);
courses.add(course);
}

@ -1,245 +0,0 @@
import 'dart:ui';
import 'package:timemanagerapp/entity/Course.dart';
import 'package:timemanagerapp/setting/Setting.dart';
class CourseWidgetController {
final double pixelToMinuteRatio =
0.9 * Setting.pixelToMinuteRatio_ratio; //old:0.9
late List<Course> courseList;
late DateTime mondayTime;
late int weekCount;
late DateTime termStartDate;
CourseWidgetController() {
mondayTime = getmondayTime();
termStartDate = Setting.startdate;
weekCount = getWeekCount();
}
//getInstance
static CourseWidgetController getInstance() {
return new CourseWidgetController();
}
static final List<Course> testcourseList = [
Course(
userId: 1,
courseId: 2,
name: 'Math',
credit: 3,
teacher: 'Mr. Smith',
location: 'Room 101',
remark: "null",
start: DateTime(2023, 9, 18, 7, 20),
end: DateTime(2023, 9, 18, 10, 0)),
Course(
userId: 1,
courseId: 2,
name: 'Math',
credit: 3,
teacher: 'Mr. Smith',
location: 'Room 101',
remark: "null",
start: DateTime(2023, 9, 19, 7, 20),
end: DateTime(2023, 9, 19, 10, 0)),
Course(
userId: 1,
courseId: 2,
name: 'Math',
credit: 3,
teacher: 'Mr. Smith',
location: 'Room 101',
remark: "null",
start: DateTime(2023, 9, 20, 7, 20),
end: DateTime(2023, 9, 20, 10, 0)),
Course(
userId: 1,
courseId: 2,
name: 'Math',
credit: 3,
teacher: 'Mr. Smith',
location: 'Room 101',
remark: "null",
start: DateTime(2023, 9, 21, 7, 20),
end: DateTime(2023, 9, 21, 10, 0)),
Course(
userId: 1,
courseId: 2,
name: 'Math',
credit: 3,
teacher: 'Mr. Smith',
location: 'Room 101',
remark: "null",
start: DateTime(2023, 9, 22, 7, 20),
end: DateTime(2023, 9, 22, 10, 0)),
Course(
userId: 1,
courseId: 2,
name: 'Math',
credit: 3,
teacher: 'Mr. Smith',
location: 'Room 101',
remark: "null",
start: DateTime(2023, 9, 23, 7, 20),
end: DateTime(2023, 9, 23, 10, 0)),
Course(
userId: 1,
courseId: 2,
name: 'Math',
credit: 3,
teacher: 'Mr. Smith',
location: 'Room 101',
remark: "null",
start: DateTime(2023, 9, 24, 7, 20),
end: DateTime(2023, 9, 24, 10, 0)),
];
//piexl
List<Offset> convertTimeList(List<DateTime> timePoints, double deviceWidth) {
List<Offset> convertedTimes = [];
for (var time in timePoints) {
int hour = time.hour;
int minute = time.minute;
int totalMinutes = (hour - 7) * 60 + minute;
double convertedTime = totalMinutes * pixelToMinuteRatio;
convertedTimes.add(Offset(deviceWidth * 0.015, convertedTime));
}
return convertedTimes;
}
int getWeekCount() {
weekCount = DateTime.now().difference(termStartDate).inDays ~/ 7 + 1;
return weekCount;
}
DateTime getmondayTime() {
mondayTime = DateTime.now();
//
while (mondayTime.weekday != 1) {
mondayTime = mondayTime.subtract(Duration(days: 1));
}
return mondayTime;
}
Map<int, List<Course>> transformCourseMap(List<Course> courseList) {
Map<int, List<Course>> courseMap = {};
for (var course in courseList) {
int weekCount = course.start.difference(termStartDate).inDays ~/ 7 + 1; //
if (courseMap.containsKey(weekCount)) {
courseMap[weekCount]!.add(course);
} else {
courseMap[weekCount] = [course];
}
}
return courseMap;
}
}

@ -10,11 +10,16 @@ class TaskController {
IdGenerator idGenerator = IdGenerator();
List<Task> taskList = []; //courseList
NetWorkController netWorkController = NetWorkController();
late TaskDao taskDao;
DateTime termstartdate = Setting.startdate; //Setting.getStartDate();
TaskController(){
taskDao = TaskDao();
}
Future<List<Task>> getTasks() async {
List<Map<String, dynamic>> taskMaps = await TaskDao().getTasks();
List<Map<String, dynamic>> taskMaps = await taskDao.getTasks();
List<Task> tasks = []; // Task
for (var taskMap in taskMaps) {
@ -69,33 +74,33 @@ class TaskController {
Future<int> insertTask(Task task) async {
return await TaskDao().insertTask(task);
return await taskDao.insertTask(task);
}
Future<int> insertTaskList(List<Task> taskList) async {
int result = 0;
for (Task task in taskList) {
result += await TaskDao().insertTask(task);
result += await taskDao.insertTask(task);
}
return result;
}
//delete
Future<int> deleteTaskByid(int id) async {
return await TaskDao().deleteTaskByid(id);
return await taskDao.deleteTaskByid(id);
}
Future<int> deleteTaskByTaskid(int taskid) async {
return await TaskDao().deleteTaskByTaskid(taskid);
return await taskDao.deleteTaskByTaskid(taskid);
}
Future<int> deleteAllTasks() async {
return await TaskDao().deleteAllTasks();
return await taskDao.deleteAllTasks();
}
//update
Future<int> updateTask(Task task) async {
return await TaskDao().updateTask(task);
return await taskDao.updateTask(task);
}
}

@ -0,0 +1,89 @@
import 'dart:ui';
import 'package:timemanagerapp/entity/Course.dart';
import 'package:timemanagerapp/setting/Setting.dart';
class TimetableWidgetController {
final double pixelToMinuteRatio =
0.9 * Setting.pixelToMinuteRatio_ratio; //old:0.9
late List<Course> courseList;
late DateTime mondayTime;
late int weekCount;
late DateTime termStartDate;
TimetableWidgetController() {
mondayTime = getmondayTime();
termStartDate = Setting.startdate;
weekCount = getWeekCount();
}
//getInstance
static TimetableWidgetController getInstance() {
return new TimetableWidgetController();
}
//piexl
List<Offset> convertTimeList(List<DateTime> timePoints, double deviceWidth) {
List<Offset> convertedTimes = [];
for (var time in timePoints) {
int hour = time.hour;
int minute = time.minute;
int totalMinutes = (hour - 7) * 60 + minute;
double convertedTime = totalMinutes * pixelToMinuteRatio;
convertedTimes.add(Offset(deviceWidth * 0.015, convertedTime));
}
return convertedTimes;
}
int getWeekCount() {
weekCount = DateTime.now().difference(termStartDate).inDays ~/ 7 + 1;
return weekCount;
}
DateTime getmondayTime() {
mondayTime = DateTime.now();
//
while (mondayTime.weekday != 1) {
mondayTime = mondayTime.subtract(Duration(days: 1));
}
return mondayTime;
}
Map<int, List> transformCourseMap(List blockList) {
Map<int, List> timeblockMap = {};
for (var timeBlock in blockList) {
int weekCount = timeBlock.startTime.difference(termStartDate).inDays ~/ 7 + 1; //
if (timeblockMap.containsKey(weekCount)) {
timeblockMap[weekCount]!.add(timeBlock);
} else {
timeblockMap[weekCount] = [timeBlock];
}
}
return timeblockMap;
}
//x
var weekListPixel=[0,Setting.deviceWidth*0.12,Setting.deviceWidth*0.24,Setting.deviceWidth*0.36,Setting.deviceWidth*0.48,Setting.deviceWidth*0.60,Setting.deviceWidth*0.72];
// Course(this.name, this.teacher, this.location, this.startTime, this.endTime);
double getdy(timeBlock)
{
double y=(((timeBlock.startTime.hour-7)*60+timeBlock.startTime.minute)*0.9)*Setting.pixelToMinuteRatio_ratio;
return y;
}
double getdx(timeBlock)
{
int x=timeBlock.startTime.weekday-1;
return weekListPixel[x].toDouble();
}
double getHeight(timeBlock){
return (((timeBlock.endTime.hour-7)*60+timeBlock.endTime.minute)*0.9-this.getdy(timeBlock))*Setting.pixelToMinuteRatio_ratio;
}
}

@ -54,6 +54,7 @@ class WorkController {
));
Work work = Work(
id: await idGenerator.generateId(),
name: scheduleForm.getName,
workId: await idGenerator.generateId(),
userId: Setting.user!.getId!,
status: "未完成",

@ -17,7 +17,7 @@ class MyDatabase {
final database =
await openDatabase(path, version: 1, onCreate: _createTables);
// //
//
// await _dropAllTables(database);
//
@ -52,7 +52,7 @@ class MyDatabase {
role INTEGER NOT NULL
);
''');
print("userstable create success");
// print("userstable create success");
}
static Future<void> _createWorkTable(Database db, int version) async {
@ -63,6 +63,7 @@ class MyDatabase {
userId INTEGER NOT NULL,
workId INTEGER NOT NULL,
teamId INTEGER NOT NULL,
name TEXT NOT NULL,
status TEXT NOT NULL,
workContent TEXT NOT NULL,
functionaryId INTEGER NOT NULL,
@ -70,7 +71,7 @@ class MyDatabase {
startTime TEXT NOT NULL
);
''');
print("Coursetable create success");
// print("Coursetable create success");
}
static Future<void> _createClockTable(Database db, int version) async {

@ -1,3 +1,4 @@
import 'package:sqflite/sqflite.dart';
import 'package:timemanagerapp/database/MyDatebase.dart';
import 'package:timemanagerapp/entity/Course.dart';
@ -5,15 +6,16 @@ import 'package:timemanagerapp/entity/Course.dart';
*
*/
class CourseDao {
//
static CourseDao getInstance() {
return new CourseDao();
late Future<Database> _database;
CourseDao() {
_database = MyDatabase.initDatabase();
}
var db = MyDatabase.initDatabase();
// MyDatabase.initDatabase()
Future<List<Map<String, dynamic>>> getCourses() async {
final database = await db;
final database = await _database;
if (database != null) {
return database.rawQuery('SELECT * FROM course');
} else {
@ -22,7 +24,7 @@ class CourseDao {
}
Future<int> insertCourse(Course course) async {
final database = await db;
final database = await _database;
int result = 0;
if (database != null) {
await database.transaction((txn) async {
@ -30,7 +32,7 @@ class CourseDao {
//!!!
result = await txn.rawInsert('''
INSERT INTO course(userId,courseId,name,credit,teacher,location,remark,start,end)
VALUES(${course.userId},${course.courseId},"${course.name}",${course.credit},"${course.teacher}","${course.location}","${course.remark}","${course.start}","${course.end}")
VALUES(${course.userId},${course.courseId},"${course.name}",${course.credit},"${course.teacher}","${course.location}","${course.remark}","${course.startTime}","${course.endTime}")
''');
});
// print("课程插入 : " + course.toString());
@ -39,7 +41,7 @@ class CourseDao {
}
Future<int> updateCourseById(Course course) async {
final database = await db;
final database = await _database;
int result = 0;
if (database != null) {
await database.transaction((txn) async {
@ -48,7 +50,7 @@ class CourseDao {
.courseId},name = "${course.name}",credit = ${course
.credit},teacher = "${course.teacher}",location = "${course
.location}",remark = "${course.remark}",start = "${course
.start}",end = "${course.end}"
.startTime}",end = "${course.endTime}"
WHERE id = ${course.id}
''');
});
@ -57,7 +59,7 @@ class CourseDao {
}
Future<int> updateCourseByCourseId(Course course) async {
final database = await db;
final database = await _database;
int result = 0;
if (database != null) {
await database.transaction((txn) async {
@ -66,7 +68,7 @@ class CourseDao {
.courseId},name = "${course.name}",credit = ${course
.credit},teacher = "${course.teacher}",location = "${course
.location}",remark = "${course.remark}",start = "${course
.start}",end = "${course.end}"
.startTime}",end = "${course.endTime}"
WHERE courseId = ${course.courseId}
''');
});
@ -75,7 +77,7 @@ class CourseDao {
}
Future<int> deleteCourseById(int id) async {
final database = await db;
final database = await _database;
int result = 0;
if (database != null) {
result = await database.delete('course', where: 'id = ?', whereArgs: [id]);
@ -84,7 +86,7 @@ class CourseDao {
}
Future<int> deleteCourseByCourseId(int courseId) async {
final database = await db;
final database = await _database;
int result = 0;
if (database != null) {
result = await database
@ -94,7 +96,7 @@ class CourseDao {
}
Future<int> deleteAllCourses() async {
final database = await db;
final database = await _database;
int result = 0;
if (database != null) {
result = await database.delete('course', where: '1=1');

@ -1,3 +1,6 @@
import 'package:sqflite/sqflite.dart';
import '../../entity/Task.dart';
import '../../entity/Task.dart';
import '../MyDatebase.dart';
@ -7,54 +10,58 @@ class TaskDao {
return new TaskDao();
}
var db = MyDatabase.initDatabase();
late Future<Database> _database;
TaskDao() {
_database = MyDatabase.initDatabase();
}
Future<List<Map<String, dynamic>>> getTasks() async {
final database = await db;
final database = await _database;
if (database != null) {
return database.query('Task', orderBy: 'id ASC');
return database.query('tasks', orderBy: 'id ASC');
} else {
return [];
}
}
Future<int> insertTask(Task task) async {
final database = await db;
final database = await _database;
if (database != null) {
return await database.insert('Task', task.toMap());
return await database.insert('tasks', task.toMap());
}
return 0;
}
Future<int> updateTask(Task task) async {
final database = await db;
final database = await _database;
if (database != null) {
return await database
.update('Task', task.toMap(), where: 'id = ?', whereArgs: [task.id]);
.update('tasks', task.toMap(), where: 'id = ?', whereArgs: [task.id]);
}
return 0;
}
Future<int> deleteTaskByid(int id) async {
final database = await db;
final database = await _database;
if (database != null) {
return await database.delete('Task', where: 'id = ?', whereArgs: [id]);
return await database.delete('tasks', where: 'id = ?', whereArgs: [id]);
}
return 0;
}
Future<int> deleteTaskByTaskid(int taskid) async {
final database = await db;
final database = await _database;
if (database != null) {
return await database.delete('Task', where: 'taskid = ?', whereArgs: [taskid]);
return await database.delete('tasks', where: 'taskid = ?', whereArgs: [taskid]);
}
return 0;
}
Future<int> deleteAllTasks() async {
final database = await db;
final database = await _database;
if (database != null) {
return await database.delete('Task', where: '1=1');
return await database.delete('tasks', where: '1=1');
}
return 0;
}

@ -9,8 +9,8 @@ class Course {
String teacher;
String location;
String remark;
DateTime start;
DateTime end;
DateTime startTime;
DateTime endTime;
Course({
this.id,
@ -21,8 +21,8 @@ class Course {
required this.teacher,
required this.location,
required this.remark,
required this.start,
required this.end,
required this.startTime,
required this.endTime,
});
Map<String,dynamic> toMap(){
@ -34,27 +34,11 @@ class Course {
'teacher':"$teacher",
'location':"$location",
'remark':"$remark",
'start':"${start.toIso8601String()}",
'end':"${end.toIso8601String()}"
'startTime':"${startTime.toIso8601String()}",
'endTime':"${endTime.toIso8601String()}"
};
}
//x
var weekListPixel=[0,Setting.deviceWidth*0.12,Setting.deviceWidth*0.24,Setting.deviceWidth*0.36,Setting.deviceWidth*0.48,Setting.deviceWidth*0.60,Setting.deviceWidth*0.72];
// Course(this.name, this.teacher, this.location, this.start, this.end);
double getdy()
{
double y=(((start.hour-7)*60+start.minute)*0.9)*Setting.pixelToMinuteRatio_ratio;
return y;
}
double getdx()
{
int x=start.weekday-1;
return weekListPixel[x].toDouble();
}
double getHeight(){
return (((end.hour-7)*60+end.minute)*0.9-this.getdy())*Setting.pixelToMinuteRatio_ratio;
}
// Getter methods
@ -74,9 +58,9 @@ class Course {
String get getRemark => remark;
DateTime get getStart => start;
DateTime get getstartTime => startTime;
DateTime get getEnd => end;
DateTime get getendTime => endTime;
// Setter methods
set setId(int newId) {
@ -111,17 +95,17 @@ class Course {
remark = newRemark;
}
set setStart(DateTime newStart) {
start = newStart;
set setstartTime(DateTime newstartTime) {
startTime = newstartTime;
}
set setEnd(DateTime newEnd) {
end = newEnd;
set setendTime(DateTime newendTime) {
endTime = newendTime;
}
// toString method
@override
String toString() {
return 'Course(id: $id, userid: $userId, courseId:$courseId, name: $name, credit: $credit, teacher: $teacher, location: $location, remark: $remark, start: $start, end: $end)';
return 'Course(id: $id, userid: $userId, courseId:$courseId, name: $name, credit: $credit, teacher: $teacher, location: $location, remark: $remark, startTime: $startTime, endTime: $endTime)';
}
}

@ -3,6 +3,7 @@ class Work {
late int userId;
late String status;
late String workContent;
late String name;
late int teamId;
late int functionaryId;
late int workId;
@ -15,6 +16,7 @@ class Work {
required this.status,
required this.workContent,
required this.teamId,
required this.name,
required this.functionaryId,
required this.workId,
required this.endTime,
@ -27,6 +29,7 @@ class Work {
'status': "$status",
'workContent': "$workContent",
'teamId': teamId,
'name': "$name",
'functionaryId': functionaryId,
'workId': workId,
'endTime': "${endTime.toIso8601String()}",
@ -43,6 +46,8 @@ class Work {
String get getWorkContent => workContent;
String get getName => name;
int get getTeamId => teamId;
int get getFunctionaryId => functionaryId;
@ -74,6 +79,10 @@ class Work {
teamId = newTeamId;
}
set setName(String newName) {
name = newName;
}
set setFunctionaryId(int newFunctionaryId) {
functionaryId = newFunctionaryId;
}
@ -93,6 +102,6 @@ class Work {
// toString method
@override
String toString() {
return 'Work(id: $id, userId:$userId, status: $status, workContent: $workContent, teamId: $teamId, functionaryId: $functionaryId, workId: $workId, endTime: $endTime, startTime: $startTime)';
return 'Work(id: $id, userId:$userId, name:$name, status: $status, workContent: $workContent, teamId: $teamId, functionaryId: $functionaryId, workId: $workId, endTime: $endTime, startTime: $startTime)';
}
}

@ -7,11 +7,13 @@ class TimeProvider extends ChangeNotifier {
set updatTimtTablecount(int value) {
print("provider手动更新课表");
_updatTimtTablecount = value;
notifyListeners();
}
void updateTimetable() {
print("provider手动更新课表");
_updatTimtTablecount = ~_updatTimtTablecount;
notifyListeners();
}

@ -96,14 +96,17 @@ class GetCourseByLogin {
//
final timeRegex = RegExp(r'星期([一二三四五六日])第(\d)-(\d)节\{([^{}]+)\}');
final match = timeRegex.firstMatch(courseTime);
if (match != null) {
final Iterable<Match> allMatches = timeRegex.allMatches(courseTime); //Bug:
for(var match in allMatches){
var sameCourseId = await idGenerator.generateId();
final weekday = weekdayMap[match.group(1)!];
final startSection = int.parse(match.group(2)!);
final endSection = int.parse(match.group(3)!);
final weekInfo = match.group(4)!;
//
final weekRanges = weekInfo.split('');
final weekRanges = weekInfo.split(',');
for (var weekRange in weekRanges) {
//
@ -113,6 +116,7 @@ class GetCourseByLogin {
final weekRegex = RegExp(r'(\d+)-(\d+)周(?:\((单|双)\))?');
final weekMatch = weekRegex.firstMatch(weekRange);
if (weekMatch != null) {
final Iterable<Match> allMatches = weekRegex.allMatches(weekRange);
final startWeek = int.parse(weekMatch.group(1)!);
final endWeek = int.parse(weekMatch.group(2)!);
final weekType = weekMatch.group(3); // null
@ -139,47 +143,19 @@ class GetCourseByLogin {
// Course
final course = Course(
id: int.parse(courseId),
id: await idGenerator.generateId(),
userId: Setting.user != null ? Setting.user!.id : null,
courseId: await idGenerator.generateId(),
courseId: sameCourseId,
name: courseTitle,
credit: courseData['credit'],
teacher: courseData['teacher'],
location: courseData['place'],
remark: "schoolclass",
start: startdate,
end: endDate,
startTime: startdate,
endTime: endDate,
);
courses.add(course);
// //
// for (var section = startSection; section <= endSection; section++) {
// //
// final termstartdate = termstartdate.add(Duration(
// days: (7 * (week - 1) + weekday! - 1),
// hours: int.parse(raspiyane[section - 1][0].split(':')[0]),
// minutes: int.parse(raspiyane[section - 1][0].split(':')[1]),
// ));
//
// final endDate = termstartdate.add(Duration(
// days: (7 * (week - 1) + weekday! - 1),
// hours: int.parse(raspiyane[section - 1][1].split(':')[0]),
// minutes: int.parse(raspiyane[section - 1][1].split(':')[1]),
// ));
//
// // Course
// final course = Course(
// id: courseId,
// name: courseTitle,
// credit: courseData['credit'],
// teacher: courseData['teacher'],
// location: courseData['place'],
// start: termstartdate,
// end: endDate,
// );
//
// courses.add(course);
// }
}
}
}
@ -204,8 +180,8 @@ class GetCourseByLogin {
print("credit = " + course.credit.toString());
print("teacher = " + course.teacher);
print("location = " + course.location);
print("start = " + course.start.toString());
print("end = " + course.end.toString());
print("start = " + course.startTime.toString());
print("end = " + course.endTime.toString());
}
} else {
print("null");

@ -3,7 +3,6 @@ import base64
import os
import sys
from pprint import pprint
import sys
from zfn_api import Client

@ -207,7 +207,7 @@ class _AddCourseFormWidgetState extends State<AddCourseFormWidget> {
courseController.addCourseForm(courseForm).then(((value){
//
timePro.updateTimetable();
timePro.updatTimtTablecount = 100;
// timePro.updatTimtTablecount = 100;
Navigator.pop(context);
}));

@ -1,10 +1,13 @@
import 'package:flutter/material.dart';
import 'package:multi_select_flutter/dialog/multi_select_dialog_field.dart';
import 'package:multi_select_flutter/util/multi_select_item.dart';
import 'package:provider/provider.dart';
import 'package:timemanagerapp/controller/TaskController.dart';
import 'package:timemanagerapp/controller/WorkController.dart';
import 'package:timemanagerapp/entity/ScheduleForm.dart';
import 'package:timemanagerapp/entity/Task.dart';
import '../provider/TimeProvider.dart';
class AddScheduleFormWidget extends StatefulWidget {
const AddScheduleFormWidget({Key? key,required this.scheduleType,this.teamId}) : super(key: key);
@ -189,28 +192,44 @@ class _AddScheduleFormWidgetState extends State<AddScheduleFormWidget> {
},
child: Text('取消'),
),
ElevatedButton(
onPressed: () {
//
if (_formKey.currentState!.validate()) {
_formKey.currentState!.save();
//
scheduleForm.name = name;
scheduleForm.content = content;
scheduleForm.selectedDays = selectedDays.map((e) => weekdayMap[e]!).toList();
scheduleForm.startWeek = int.parse(startWeek);
scheduleForm.endWeek = int.parse(endWeek);
scheduleForm.startTime = startTime;
scheduleForm.endTime = endTime;
if(scheduleType == "task") {
taskController.addScheduleForm(scheduleForm).then((value) => Navigator.pop(context)); //
}else{
workController.addScheduleForm(scheduleForm,teamId!).then((value) => Navigator.pop(context)); //
}
Selector<TimeProvider, TimeProvider>( // time
selector: (ctx, provider) => provider,
shouldRebuild: (pre, next) => false,
builder: (ctx, timePro, child) {
return ElevatedButton(
onPressed: () {
//
if (_formKey.currentState!.validate()) {
_formKey.currentState!.save();
//
scheduleForm.name = name;
scheduleForm.content = content;
scheduleForm.selectedDays = selectedDays.map((e) => weekdayMap[e]!).toList();
scheduleForm.startWeek = int.parse(startWeek);
scheduleForm.endWeek = int.parse(endWeek);
scheduleForm.startTime = startTime;
scheduleForm.endTime = endTime;
if(scheduleType == "task") {
taskController.addScheduleForm(scheduleForm).then(((value){
//
timePro.updateTimetable();
// timePro.updatTimtTablecount++;
Navigator.pop(context);
}));
}else{
workController.addScheduleForm(scheduleForm,teamId!).then(((value){
//
timePro.updateTimetable();
// timePro.updatTimtTablecount++;
Navigator.pop(context);
}));
}
}
},
child: Text('确定'),
}
},
child: Text('确定'),
);
}
),
],
),

@ -28,6 +28,10 @@ import 'package:timemanagerapp/entity/Course.dart';
import 'package:timemanagerapp/entity/User.dart';
import 'package:timemanagerapp/database/MyDatebase.dart';
import '../controller/TaskController.dart';
import '../controller/WorkController.dart';
import '../setting/Setting.dart';
class TestWidget extends StatefulWidget {
const TestWidget({Key? key}) : super(key: key);
@ -39,6 +43,8 @@ class TestWidget extends StatefulWidget {
class _TestWidgetState extends State<TestWidget> {
late UserController userController;
late CourseController courseController;
late TaskController taskController;
late WorkController WwrkController;
@override
void initState() {
@ -46,6 +52,7 @@ class _TestWidgetState extends State<TestWidget> {
MyDatabase.initDatabase();
userController = UserController.getInstance();
courseController = CourseController.getInstance();
taskController = TaskController();
}
@override
@ -55,45 +62,33 @@ class _TestWidgetState extends State<TestWidget> {
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
onPressed: userController.deleteAllUsers,
child: Text('删除所有用户'),
),
ElevatedButton(
onPressed: () => userController.insertUser(User(
username: "测试用户", password: "23243", role: 1)),
child: Text('插入一个测试用户'),
),
ElevatedButton(
onPressed: () {
userController.getUsers().then((users) {
showDialog(
context: context,
builder: (context) {
return AlertDialog(
title: Text('用户列表'),
title: Text('当前用户信息'),
content: SingleChildScrollView(
child: Column(
mainAxisSize: MainAxisSize.min,
children: users
.map((user) => ListTile(
title: Text(user['username']),
subtitle: Text(user.toString()),
))
.toList(),
child: ListTile(
title: Text(Setting.user!.username),
subtitle: Text(Setting.user.toString()),
),
),
);
},
);
});
},
child: Text('显示用户列表'),
child: Text('当前用户信息'),
),
ElevatedButton(
onPressed: courseController.deleteAllCourses,
child: Text('删除所有课程'),
),
ElevatedButton(
onPressed: taskController.deleteAllTasks,
child: Text('删除所有个人计划'),
),
// ElevatedButton(
// onPressed: () => courseController.autoImportCours(jsonstr),
// child: Text('导入课程(待开发)'),
@ -107,8 +102,8 @@ class _TestWidgetState extends State<TestWidget> {
teacher: "嘉豪",
location: "638",
remark: "happy",
start: DateTime.now(),
end: DateTime.now().add(Duration(hours: 2)))),
startTime: DateTime.now(),
endTime: DateTime.now().add(Duration(hours: 2)))),
child: Text('插入一个测试课程'),
),
ElevatedButton(
@ -137,6 +132,32 @@ class _TestWidgetState extends State<TestWidget> {
},
child: Text('显示课程列表'),
),
ElevatedButton(
onPressed: () {
taskController.getTasks().then((tasks) {
showDialog(
context: context,
builder: (context) {
return AlertDialog(
title: Text('个人计划列表'),
content: SingleChildScrollView(
child: Column(
mainAxisSize: MainAxisSize.min,
children: tasks
.map((task) => ListTile(
title: Text(task.getName),
subtitle: Text(task.toString()),
))
.toList(),
),
),
);
},
);
});
},
child: Text('显示个人计划列表'),
),
AddCourseButton(onCourseAdded: (jsonstr) {
// addCourse()
courseController.test_autoImportCours(jsonstr);

@ -4,9 +4,12 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:timemanagerapp/controller/CourseController.dart';
import 'package:timemanagerapp/controller/CourseWidgetController.dart';
import 'package:timemanagerapp/controller/TaskController.dart';
import 'package:timemanagerapp/controller/TimetableWidgetController.dart';
import '../entity/Course.dart';
import '../entity/Task.dart';
import '../entity/Work.dart';
import '../provider/TimeProvider.dart';
import '../setting/Setting.dart';
@ -19,15 +22,22 @@ class TimetableWidget extends StatefulWidget {
class TimetableWidgetState extends State<TimetableWidget> {
late double deviceWidth;
int firstInit = 0;
//
late CourseWidgetController courseWidgetController = CourseWidgetController();
late TimetableWidgetController timetableWidgetController = TimetableWidgetController();
late CourseController courseController = CourseController.getInstance();
late TaskController taskController = TaskController();
late List timeBlockList = [];
List taskList = [];
Map<int, List> timeBlockWeekMap = {};
//
var weekList = ['', '', '', '', '', '', ''];
//
List<Course> courseList = [];
Map<int, List<Course>> courseWeekMap = {};
Map<int, List> courseWeekMap = {};
//
var dateListstr = [];
@ -64,60 +74,90 @@ class TimetableWidgetState extends State<TimetableWidget> {
TimetableWidgetState({required this.deviceWidth});
updateDateByWeekCount() {
var mondayTime = courseWidgetController.getmondayTime();
//
for (int i = 0; i < 7; i++) {
dateListstr[i] = mondayTime
.add(Duration(days: i + 7 * (weekCount - currentWeek)))
.day
.toString();
}
}
Future<void> futureDo() async {
courseList = await courseController.getCourses();
//
print('开始futureDo');
//
// courseList = await courseController.getCourses();
//
var mondayTime = courseWidgetController.getmondayTime();
currentWeek = courseWidgetController.getWeekCount();
courseList = await courseController.getCourses();
taskList = await taskController.getTasks();
}
//
@override
initState() {
super.initState();
}
dataInitAfterFutherDo(){
//
timeBlockWeekMap = {};
timeBlockList = [];
currentWeek = timetableWidgetController.getWeekCount();
weekCount = currentWeek;
// courseList = CourseWidgetController.testcourseList;
weekCount = courseWidgetController.getWeekCount();
courseWeekMap = courseWidgetController.transformCourseMap(courseList);
//
timeBlockList.addAll(courseList);
timeBlockList.addAll(taskList);
timeBlockWeekMap = timetableWidgetController.transformCourseMap(timeBlockList);
//
var mondayTime = timetableWidgetController.getmondayTime();
//
for (int i = 0; i < 7; i++) {
dateListstr.add((mondayTime.day + i).toString());
if ((mondayTime.day + i) == DateTime.now().day) {
currentWeekDayIndex = i + 1;
}
}
// print('Recent monday '+DateTime.now().day.toString());
//
positions = courseWidgetController.convertTimeList(timePoints, deviceWidth);
positions = timetableWidgetController.convertTimeList(timePoints, deviceWidth);
}
//
@override
initState() {
super.initState();
updateAfterFutherDo(){
timeBlockWeekMap = {};
timeBlockList = [];
timeBlockList.addAll(courseList);
timeBlockList.addAll(taskList);
timeBlockWeekMap = timetableWidgetController.transformCourseMap(timeBlockList);//
var mondayTime = timetableWidgetController.getmondayTime();
//
for (int i = 0; i < 7; i++) {
dateListstr[i] = mondayTime
.add(Duration(days: i + 7 * (weekCount - currentWeek)))
.day
.toString();
}
// print('Recent monday '+DateTime.now().day.toString());
}
@override
Widget build(BuildContext contexvoidt) {
return Consumer<TimeProvider>(
builder: (ctx, timePro, child) {
print('Rebuild timePro.updatTimtTablecount = ' + timePro.updatTimtTablecount.toString());
print('Rebuild timePro');
return FutureBuilder<void>(
future: futureDo(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
//
if (snapshot.connectionState == ConnectionState.done) {
if(firstInit == 0){ //
dataInitAfterFutherDo();
firstInit = 1;
}else{ //
updateAfterFutherDo();
}
return RefreshIndicator(
onRefresh: () {
print('下拉refresh');
return futureDo().then((value) => setState(() {}));
},
child: GestureDetector(
@ -278,128 +318,41 @@ class TimetableWidgetState extends State<TimetableWidget> {
// height: 2000,
child: Stack(
children: List.generate(
//
courseWeekMap.containsKey(weekCount)
? courseWeekMap[weekCount]!.length
: 0,
((index) => Positioned(
top: courseWeekMap[weekCount]![
index]
.getdy() +
10,
left: courseWeekMap[weekCount]![
index]
.getdx() +
deviceWidth * 0.15,
timeBlockWeekMap.containsKey(weekCount)
? timeBlockWeekMap[weekCount]!.length
: 0,
(index) {
var currentItem = timeBlockWeekMap[weekCount]![index];
return Positioned(
top: timetableWidgetController.getdy(currentItem) + 10,
left: timetableWidgetController.getdx(currentItem) + deviceWidth * 0.15,
child: SingleChildScrollView(
child: Container(
//
width: deviceWidth * 0.115,
height: courseWeekMap[
weekCount]![index]
.getHeight(),
height: timetableWidgetController.getHeight(currentItem),
decoration: BoxDecoration(
color: Colors.tealAccent,
//
borderRadius: BorderRadius
.all(Radius.circular(
10.0)), //
color: getItemColor(currentItem),
borderRadius: BorderRadius.all(
Radius.circular(10.0),
),
),
child:
SingleChildScrollView(
child: SingleChildScrollView(
child: Column(
//
children: [
Text(
courseWeekMap[
weekCount]![
index]
.name,
style: TextStyle(
fontSize: 10,
fontWeight:
FontWeight
.bold),
overflow: TextOverflow
.clip, //name
),
Text(
courseWeekMap[
weekCount]![
index]
.teacher,
style: TextStyle(
fontSize: 8),
overflow:
TextOverflow
.clip,
),
Text(
courseWeekMap[
weekCount]![
index]
.location,
style: TextStyle(
fontSize: 10),
overflow:
TextOverflow
.clip,
),
Text(
courseWeekMap[weekCount]![
index]
.start
.hour
.toString() +
':' +
courseWeekMap[
weekCount]![
index]
.start
.minute
.toString(),
style: TextStyle(
fontSize: 10),
overflow:
TextOverflow
.clip,
),
Text(
courseWeekMap[weekCount]![
index]
.end
.hour
.toString() +
':' +
courseWeekMap[
weekCount]![
index]
.end
.minute
.toString(),
style: TextStyle(
fontSize: 10),
overflow:
TextOverflow
.clip,
),
Text(
courseWeekMap[
weekCount]![
index]
.remark,
style: TextStyle(
fontSize: 10),
overflow:
TextOverflow
.clip,
),
if (currentItem is Course)
CouresBlockContenWidget(currentItem: currentItem),
if (currentItem is Task)
TaskBlockContentWidget(currentItem: currentItem),
if (currentItem is Work)
WorkBlockContentWidget(currentItem: currentItem),
],
),
),
),
),
))),
);
},
),
))
],
),
@ -421,4 +374,173 @@ class TimetableWidgetState extends State<TimetableWidget> {
);
}
//
Color getItemColor(dynamic item) {
if (item is Course) {
return Colors.tealAccent;
} else if (item is Task) {
return Colors.yellowAccent;
} else if (item is Work) {
return Colors.deepOrangeAccent;
}
return Colors.tealAccent; //
}
}
class CouresBlockContenWidget extends StatelessWidget {
const CouresBlockContenWidget({
super.key,
required this.currentItem,
});
final Course currentItem;
@override
Widget build(BuildContext context) {
return Column(
children: [
Text(
(currentItem as Course).name,
style: TextStyle(
fontSize: 10,
fontWeight: FontWeight.bold,
),
overflow: TextOverflow.clip,
),
Text(
(currentItem as Course).teacher,
style: TextStyle(
fontSize: 8,
),
overflow: TextOverflow.clip,
),
Text(
(currentItem as Course).location,
style: TextStyle(
fontSize: 10,
),
overflow: TextOverflow.clip,
),
Text(
(currentItem as Course).startTime.hour.toString() +
':' +
(currentItem as Course).startTime.minute.toString(),
style: TextStyle(
fontSize: 10,
),
overflow: TextOverflow.clip,
),
Text(
(currentItem as Course).endTime.hour.toString() +
':' +
(currentItem as Course).endTime.minute.toString(),
style: TextStyle(
fontSize: 10,
),
overflow: TextOverflow.clip,
),
Text(
(currentItem as Course).remark,
style: TextStyle(
fontSize: 10,
),
overflow: TextOverflow.clip,
),
],
);
}
}
class TaskBlockContentWidget extends StatelessWidget {
const TaskBlockContentWidget({
Key? key,
required this.currentItem,
}) : super(key: key);
final Task currentItem;
@override
Widget build(BuildContext context) {
return Column(
children: [
Text(
(currentItem as Task).name,
style: TextStyle(
fontSize: 10,
fontWeight: FontWeight.bold,
),
overflow: TextOverflow.clip,
),
Text(
(currentItem as Task).content,
style: TextStyle(
fontSize: 8,
),
overflow: TextOverflow.clip,
),
Text(
(currentItem as Task).startTime.toString(),
style: TextStyle(
fontSize: 10,
),
overflow: TextOverflow.clip,
),
Text(
(currentItem as Task).endTime.toString(),
style: TextStyle(
fontSize: 10,
),
overflow: TextOverflow.clip,
),
],
);
}
}
class WorkBlockContentWidget extends StatelessWidget {
const WorkBlockContentWidget({
Key? key,
required this.currentItem,
}) : super(key: key);
final Work currentItem;
@override
Widget build(BuildContext context) {
return Column(
children: [
Text(
currentItem.name,
style: TextStyle(
fontSize: 10,
fontWeight: FontWeight.bold,
),
overflow: TextOverflow.clip,
),
Text(
currentItem.workContent,
style: TextStyle(
fontSize: 8,
),
overflow: TextOverflow.clip,
),
Text(
currentItem.startTime.toString(),
style: TextStyle(
fontSize: 10,
),
overflow: TextOverflow.clip,
),
Text(
currentItem.endTime.toString(),
style: TextStyle(
fontSize: 10,
),
overflow: TextOverflow.clip,
),
],
);
}
}
Loading…
Cancel
Save