Compare commits

..

25 Commits

BIN
.DS_Store vendored

Binary file not shown.

@ -1 +1,2 @@
# flutter

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

BIN
src/.DS_Store vendored

Binary file not shown.

@ -1,8 +1,8 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application
android:label="多为时间"
android:label="timemanagerapp"
android:name="${applicationName}"
android:icon="@mipmap/logo">
android:icon="@mipmap/ic_launcher">
<activity
android:name=".MainActivity"
android:exported="true"
@ -30,9 +30,4 @@
android:name="flutterEmbedding"
android:value="2" />
</application>
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
</manifest>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

@ -4,9 +4,4 @@
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
</manifest>

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 372 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 266 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 198 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 479 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 134 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 MiB

@ -1,134 +0,0 @@
/*
Navicat MySQL Data Transfer
Source Server : LRC_debian
Source Server Version : 50742
Source Host : 5902e9v900.zicp.fun:33006
Source Database : expressFrame02
Target Server Type : MYSQL
Target Server Version : 50742
File Encoding : 65001
Date: 2023-10-26 12:49:35
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for clocks
-- ----------------------------
DROP TABLE IF EXISTS `clocks`;
CREATE TABLE `clocks` (
`id` bigint(20) NOT NULL,
`clockId` bigint(20) NOT NULL,
`userId` bigint(20) NOT NULL,
`text` text,
`img` text,
`music` text,
PRIMARY KEY (`id`) USING BTREE,
KEY `fk_clocks_clocks_1` (`userId`),
CONSTRAINT `fk_clocks_clocks_1` FOREIGN KEY (`userId`) REFERENCES `users` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
-- ----------------------------
-- Table structure for course
-- ----------------------------
DROP TABLE IF EXISTS `course`;
CREATE TABLE `course` (
`id` bigint(20) NOT NULL,
`userId` bigint(20) DEFAULT NULL,
`courseId` bigint(20) NOT NULL,
`name` text NOT NULL,
`credit` double DEFAULT NULL,
`teacher` text,
`location` text,
`remark` text,
`startTime` text NOT NULL,
`endTime` text NOT NULL,
PRIMARY KEY (`id`) USING BTREE,
KEY `fk_course_course_1` (`userId`),
CONSTRAINT `fk_course_course_1` FOREIGN KEY (`userId`) REFERENCES `users` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
-- ----------------------------
-- Table structure for tasks
-- ----------------------------
DROP TABLE IF EXISTS `tasks`;
CREATE TABLE `tasks` (
`id` bigint(20) NOT NULL,
`taskId` bigint(20) NOT NULL,
`userId` bigint(20) NOT NULL,
`content` text,
`name` text NOT NULL,
`startTime` text NOT NULL,
`endTime` text NOT NULL,
PRIMARY KEY (`id`) USING BTREE,
KEY `fk_tasks_tasks_1` (`userId`),
CONSTRAINT `fk_tasks_tasks_1` FOREIGN KEY (`userId`) REFERENCES `users` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
-- ----------------------------
-- Table structure for teams
-- ----------------------------
DROP TABLE IF EXISTS `teams`;
CREATE TABLE `teams` (
`id` bigint(20) NOT NULL,
`leaderId` bigint(20) NOT NULL,
`teamName` varchar(200) NOT NULL,
`maxNumber` bigint(20) DEFAULT NULL,
`introduce` text,
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `teamName` (`teamName`) USING BTREE,
KEY `fk_teams_teams_1` (`leaderId`),
CONSTRAINT `fk_teams_teams_1` FOREIGN KEY (`leaderId`) REFERENCES `users` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
-- ----------------------------
-- Table structure for users
-- ----------------------------
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
`id` bigint(20) NOT NULL,
`username` varchar(255) NOT NULL,
`password` text NOT NULL,
`role` bigint(20) NOT NULL,
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `username` (`username`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
-- ----------------------------
-- Table structure for userteams
-- ----------------------------
DROP TABLE IF EXISTS `userteams`;
CREATE TABLE `userteams` (
`id` bigint(20) NOT NULL,
`userId` bigint(20) NOT NULL,
`teamId` bigint(20) NOT NULL,
PRIMARY KEY (`id`) USING BTREE,
KEY `fk_userteams_userteams_1` (`userId`),
KEY `fk_userteams_userteams_2` (`teamId`),
CONSTRAINT `fk_userteams_userteams_1` FOREIGN KEY (`userId`) REFERENCES `users` (`id`) ON DELETE CASCADE,
CONSTRAINT `fk_userteams_userteams_2` FOREIGN KEY (`teamId`) REFERENCES `teams` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
-- ----------------------------
-- Table structure for works
-- ----------------------------
DROP TABLE IF EXISTS `works`;
CREATE TABLE `works` (
`id` bigint(20) NOT NULL,
`userId` bigint(20) NOT NULL,
`workId` bigint(20) NOT NULL,
`teamId` bigint(20) NOT NULL,
`name` text NOT NULL,
`content` text,
`status` text,
`endTime` text NOT NULL,
`startTime` text NOT NULL,
PRIMARY KEY (`id`) USING BTREE,
KEY `fk_works_works_1` (`userId`),
KEY `fk_works_works_2` (`teamId`),
CONSTRAINT `fk_works_works_1` FOREIGN KEY (`userId`) REFERENCES `users` (`id`) ON DELETE CASCADE,
CONSTRAINT `fk_works_works_2` FOREIGN KEY (`teamId`) REFERENCES `teams` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 243 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 179 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 279 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 MiB

@ -1,164 +1,133 @@
import 'package:timemanagerapp/controller/NetWorkController.dart';
import 'package:timemanagerapp/database/dao/CourseDao.dart';
import 'package:timemanagerapp/entity/Course.dart';
import 'package:timemanagerapp/entity/CourseForm.dart';
import 'package:timemanagerapp/setting/Setting.dart';
import 'package:timemanagerapp/util/GetCourseByLogin.dart';
import '../util/dataUtil.dart';
class CourseController {
static CourseController getInstance() {
return new CourseController();
}
static CourseDao courseDao = CourseDao();
GetCourseByLogin getCourseByLogin = GetCourseByLogin();
IdGenerator idGenerator = IdGenerator();
List<Course> courseList = []; //courseList
NetWorkController netWorkController = NetWorkController();
DateTime termstartdate = Setting.startdate; //Setting.getStartDate();
//
final List<List<String>> raspiyane = [
["8:00", "8:45"], //1
["8:50", "9:35"], //2
["10:05", "10:50"], //3
["10:55", "11:40"], //4
["13:30", "14:15"], //5
["14:20", "15:05"], //6
["15:35", "16:20"], //7
["16:25", "17:10"], //8
["18:30", "19:15"],
["19:20", "20:05"],
["20:10", "20:55"],
["21:10", "21:50"],
["22:05", "22:35"],
];
Future<void> addCourseForm(CourseForm courseForm) async {
List<Course> courseListToInsert = [];
int allCourseId = await idGenerator.generateId();
for (int week = courseForm.getStartWeek(); week <= courseForm.getEndWeek(); week++) {
for(int day in courseForm.selectedDays){
//
final startDate = termstartdate.add(Duration(
days: (7 * (week - 1) + day! - 1),
hours: int.parse(raspiyane[courseForm.getStartTime() - 1][0].split(':')[0]),
minutes: int.parse(raspiyane[courseForm.getStartTime() - 1][0].split(':')[1]),
));
final endDate = termstartdate.add(Duration(
days: (7 * (week - 1) + day! - 1),
hours: int.parse(raspiyane[courseForm.getEndTime() - 1][1].split(':')[0]),
minutes: int.parse(raspiyane[courseForm.getEndTime() - 1][1].split(':')[1]),
));
Course course = Course(
id:await idGenerator.generateId(),
name: courseForm.getCourse(),
userId: Setting.user!.getId!,
courseId: allCourseId,
teacher: courseForm.getTeacher(),
location: courseForm.getLocation(),
startTime: startDate,
endTime: endDate,
credit: courseForm.getCredit(),
remark: courseForm.getNote()
);
courseListToInsert.add(course);
}
}
await insertCourseList(courseListToInsert);
}
Future<List<Course>> init() async {
var res = await netWorkController.getCourseList(Setting.user!.getId!);
if(res == null || res.length == 0){
courseList = [];
}else{
courseList = res;
}
for(Course course in courseList){
await courseDao.insertCourse(course);
}
return courseList;
}
Future<void> dispos() async {
courseDao.deleteAllCourses();
}
Future<List<Course>> getCourses() async {
List<Map<String, dynamic>> courseMaps = await courseDao.getCourses();
List<Course> courses = []; // Course
for (var courseMap in courseMaps) {
// 使CourseMapCourse
Course course = Course(
id: courseMap['id'],
userId: courseMap['userId'],
courseId: courseMap['courseId'],
name: courseMap['name'],
credit: courseMap['credit'],
teacher: courseMap['teacher'],
location: courseMap['location'],
remark: courseMap['remark'],
startTime: DateTime.parse(courseMap['startTime']),
endTime: DateTime.parse(courseMap['endTime']),
);
courses.add(course);
}
courseList = courses; // Course
return courseList;
}
Future<int> insertCourse(Course course) async {
return await courseDao.insertCourse(course);
}
Future<bool> insertLocalCourse() async {
List<Course> localCourseList = await getCourses();
return await netWorkController.insertCourseList(localCourseList);
}
Future<int> insertCourseList(List<Course> courseList) async {
netWorkController.insertCourseList(courseList);
int result = 0;
for(Course course in courseList){
result += await courseDao.insertCourse(course);
}
return result;
}
Future<int> autoImportCours(int userId,String passwd,int year, int term) async {
String ? jsonstr = await netWorkController.getUserCoursejson(userId, passwd, year, term);
if(jsonstr == null || jsonstr == ""){
return 0;
}
List<Course> courseList = await getCourseByLogin.dealRawString(jsonstr);
return await insertCourseList(courseList);
}
//test_autoImportCours
Future<int> test_autoImportCours(String jsonstr) async {
List<Course> courseList = await GetCourseByLogin().dealRawString(jsonstr);
return await insertCourseList(courseList);
}
Future<int> deleteAllCourses() async {
return await courseDao.deleteAllCourses();
}
Future<int> deleteCourse(int courseId) async {
netWorkController.deleteCourse(courseId);
return await courseDao.deleteCourseByCourseId(courseId);
}
}
import 'package:timemanagerapp/controller/NetWorkController.dart';
import 'package:timemanagerapp/database/dao/CourseDao.dart';
import 'package:timemanagerapp/entity/Course.dart';
import 'package:timemanagerapp/entity/CourseForm.dart';
import 'package:timemanagerapp/setting/Setting.dart';
import 'package:timemanagerapp/util/GetCourseByLogin.dart';
import '../util/dataUtil.dart';
class CourseController {
static CourseController getInstance() {
return new CourseController();
}
GetCourseByLogin getCourseByLogin = GetCourseByLogin();
IdGenerator idGenerator = IdGenerator();
List<Course> courseList = []; //courseList
NetWorkController netWorkController = NetWorkController();
DateTime termstartdate = Setting.startdate; //Setting.getStartDate();
//
final List<List<String>> raspiyane = [
["8:00", "8:45"], //1
["8:50", "9:35"], //2
["10:05", "10:50"], //3
["10:55", "11:40"], //4
["13:30", "14:15"], //5
["14:20", "15:05"], //6
["15:35", "16:20"], //7
["16:25", "17:10"], //8
["18:30", "19:15"],
["19:20", "20:05"],
["20:10", "20:55"],
["21:10", "21:50"],
["22:05", "22:35"],
];
Future<void> addCourseForm(CourseForm courseForm) async {
List<Course> courseListToInsert = [];
for (int week = courseForm.getStartWeek(); week <= courseForm.getEndWeek(); week++) {
for(int day in courseForm.selectedDays){
//
final startDate = termstartdate.add(Duration(
days: (7 * (week - 1) + day! - 1),
hours: int.parse(raspiyane[courseForm.getStartTime() - 1][0].split(':')[0]),
minutes: int.parse(raspiyane[courseForm.getStartTime() - 1][0].split(':')[1]),
));
final endDate = termstartdate.add(Duration(
days: (7 * (week - 1) + day! - 1),
hours: int.parse(raspiyane[courseForm.getEndTime() - 1][1].split(':')[0]),
minutes: int.parse(raspiyane[courseForm.getEndTime() - 1][1].split(':')[1]),
));
int courseId = await idGenerator.generateId();
Course course = Course(
id:await idGenerator.generateId(),
name: courseForm.getCourse(),
userId: Setting.user!.getId!,
courseId: courseId,
teacher: courseForm.getTeacher(),
location: courseForm.getLocation(),
start: startDate,
end: endDate,
credit: courseForm.getCredit(),
remark: courseForm.getNote()
);
courseListToInsert.add(course);
}
}
await insertCourseList(courseListToInsert);
}
Future<List<Course>> getCourses() async {
List<Map<String, dynamic>> courseMaps = await CourseDao().getCourses();
List<Course> courses = []; // Course
for (var courseMap in courseMaps) {
// 使CourseMapCourse
Course course = Course(
id: courseMap['id'],
userId: courseMap['userId'],
courseId: courseMap['courseId'],
name: courseMap['name'],
credit: courseMap['credit'],
teacher: courseMap['teacher'],
location: courseMap['location'],
remark: courseMap['remark'],
start: DateTime.parse(courseMap['start']),
end: DateTime.parse(courseMap['end']),
);
courses.add(course);
}
courseList = courses; // Course
return courseList;
}
Future<int> insertCourse(Course course) async {
return await CourseDao().insertCourse(course);
}
Future<int> insertCourseList(List<Course> courseList) async {
int result = 0;
for(Course course in courseList){
result += await CourseDao().insertCourse(course);
}
return result;
}
Future<int> autoImportCours(int stuid,String passwd,int year, int term) async {
String jsonstr = await netWorkController.getUserCoursejson(stuid, passwd, year, term);
List<Course> courseList = await getCourseByLogin.dealRawString(jsonstr);
return await insertCourseList(courseList);
}
//test_autoImportCours
Future<int> test_autoImportCours(String jsonstr) async {
List<Course> courseList = await GetCourseByLogin().dealRawString(jsonstr);
return await insertCourseList(courseList);
}
Future<int> deleteAllCourses() async {
return await CourseDao().deleteAllCourses();
}
Future<int> deleteCourse(int id) async {
return await CourseDao().deleteCourseById(id);
}
}

@ -0,0 +1,245 @@
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;
}
}

@ -1,619 +1,85 @@
import 'dart:async';
import 'dart:convert';
import "package:http/http.dart" as http;
import 'package:timemanagerapp/entity/Task.dart';
import '../entity/Course.dart';
import '../entity/Course.dart';
import '../entity/FreeTime.dart';
import '../entity/Team.dart';
import '../entity/User.dart';
import '../entity/Work.dart';
class NetWorkController {
// String baseUrl = "http://192.168.111.226:3000/";
// String baseUrl = "http://5902e9v900.zicp.fun:30002/";
String baseUrl = "http://5902e9v900.zicp.fun:3000/";
//--------------------------------------------------
//getUserList
Future<List<User>?> getUserList() async {
final response = await http.get(
Uri.parse(baseUrl+'get_user'),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
},);
final jsonResponse = json.decode(response.body);
if (jsonResponse['code'] == 200) {
List<User> userList = (jsonResponse['data'] as List)
.map((user) => User.fromJson(user as Map<String, dynamic>))
.toList();
return userList;
} else {
print("获取用户列表");
return null;
}
}
Future<User?> login(User user) async {
final response = await http.post(
Uri.parse(baseUrl+'login'),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
},
body: jsonEncode(user.toMap()),
);
final jsonResponse = json.decode(response.body);
print("login response.statusCode = " + jsonResponse[0].toString());
if (jsonResponse['code'] == 200) {
return User.fromJson(jsonResponse['data']['user'][0]);
} else {
print("登录失败");
return null;
}
}
Future<bool> register(User user) async {
final response = await http.post(
Uri.parse(baseUrl+'register'),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
},
body: jsonEncode(user.toMap()),
);
final jsonResponse = json.decode(response.body);
if (jsonResponse['code'] == 200) {
return true;
} else {
print("注册失败");
return false;
}
}
//updeateUser
Future<bool> updateUser(User user) async {
final response = await http.post(
Uri.parse(baseUrl+'update_user'),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
},
body: jsonEncode(user.toMap()),
);
final jsonResponse = json.decode(response.body);
if (jsonResponse['code'] == 200) {
return true;
} else {
print("更新用户信息失败");
return false;
}
}
//server todo
Future<bool> deleteAllUser() async {
final response = await http.post(
Uri.parse(baseUrl+'deleteUser'),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
},
body: jsonEncode({}),
);
final jsonResponse = json.decode(response.body);
if (jsonResponse['code'] == 200) {
return true;
} else {
print("删除所有用户失败");
return false;
}
}
//--------------------------------------------------
Future<List<Team>?> getMyTeamList(int userId) async {
final response = await http.get(
Uri.parse(baseUrl + 'get_team').replace(queryParameters: {'leaderId': userId.toString()}),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
},
);
final jsonResponse = json.decode(response.body);
if (jsonResponse['code'] == 200) {
List<Team> teamList = (jsonResponse['data'] as List)
.map((team) => Team.fromJson(team as Map<String, dynamic>))
.toList();
return teamList;
} else {
print("获取My团队列表失败");
return null;
}
}
Future<List<Team>?> getAllTeamListByUserId(int userId) async {
final response = await http.get(
Uri.parse(baseUrl + 'get_team').replace(queryParameters: {'userId': userId.toString()}),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
},
);
final jsonResponse = json.decode(response.body);
if (jsonResponse['code'] == 200) {
List<Team> teamList = (jsonResponse['data'] as List)
.map((team) => Team.fromJson(team as Map<String, dynamic>))
.toList();
return teamList;
} else {
print("获取All团队列表ByUserId失败");
return null;
}
}
//getTeamByTeamName
Future<Team?> getTeamByTeamName(String teamName) async {
final response = await http.get(
Uri.parse(baseUrl + 'get_team').replace(queryParameters: {'teamName': teamName}),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
},
);
final jsonResponse = json.decode(response.body);
if (jsonResponse['code'] == 200) {
List<Team> teamList = (jsonResponse['data'] as List)
.map((team) => Team.fromJson(team as Map<String, dynamic>))
.toList();
if(teamList.length > 1) {
print("存在重复团队名");
return null;
}
return teamList[0];
} else {
print("获取团队列表ByTeamName失败");
return null;
}
}
Future<List<Team>> getAllTeamList() async {
final response = await http.get(
Uri.parse(baseUrl + 'get_team'),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
},
);
final jsonResponse = json.decode(response.body);
if (jsonResponse['code'] == 200) {
List<Team> teamList = (jsonResponse['data'] as List)
.map((team) => Team.fromJson(team as Map<String, dynamic>))
.toList();
return teamList;
} else {
print("获取All团队列表失败");
return [];
}
}
Future<bool> insertTeam(Team team) async {
final response = await http.post(
Uri.parse(baseUrl+'add_team'),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
},
body: jsonEncode(team.toMap()),
);
final jsonResponse = json.decode(response.body);
if (jsonResponse['code'] == 200) {
return true;
} else {
print("insert team 失败:");
return false;
}
}
Future<bool> deleteTeam(int teamId) async {
final response = await http.post(
Uri.parse(baseUrl+'delete_team'),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
},
body: JsonEncoder().convert({
'teamId':teamId,
}),
);
final jsonResponse = json.decode(response.body);
if (jsonResponse['code'] == 200) {
return true;
} else {
print("delete team 失败:" + jsonResponse['data'].toString());
return false;
}
}
Future<bool> updateTeam(Team team) async {
final response = await http.post(
Uri.parse(baseUrl+'update_team'),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
},
body: jsonEncode(team.toMap()),
);
final jsonResponse = json.decode(response.body);
if (jsonResponse['code'] == 200) {
return true;
} else {
return false;
}
}
//--------------------------------------------------
Future<List<User>?> getTeamUserList(int teamId) async {
final response = await http.get(
Uri.parse(baseUrl + 'get_team_member').replace(queryParameters: {'teamId': teamId.toString()}),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
},
);
final jsonResponse = json.decode(response.body);
if (jsonResponse['code'] == 200) {
List<User> teamUserList = (jsonResponse['data'] as List)
.map((user) => User.fromJson(user as Map<String, dynamic>))
.toList();
return teamUserList;
} else {
return [];
}
}
Future<bool> insertTeamUser(int id,int teamId, String userName) async {
final response = await http.post(
Uri.parse(baseUrl+'add_team_member'),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
},
body: JsonEncoder().convert({
'id': id,
'teamId': teamId,
'userName': userName,
}),
);
final jsonResponse = json.decode(response.body);
if (jsonResponse['code'] == 200) {
return true;
} else {
return false;
}
}
Future<bool> deleteTeamUser(int teamId, int userId) async {
final response = await http.post(
Uri.parse(baseUrl+'delete_team_member'),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
},
body: JsonEncoder().convert({
'teamId': teamId,
'userId': userId,
}),
);
final jsonResponse = json.decode(response.body);
if (jsonResponse['code'] == 200) {
return true;
} else {
print("delete team user 失败:");
return false;
}
}
//--------------------------------------------------
Future<List<Work>?> getTeamWorkList(int teamId) async {
final response = await http.get(
Uri.parse(baseUrl + 'get_work').replace(queryParameters: {'teamId': teamId.toString()}),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
},
);
final jsonResponse = json.decode(response.body);
if (jsonResponse['code'] == 200) {
List<Work> teamWorkList = (jsonResponse['data'] as List)
.map((work) => Work.fromJson(work as Map<String, dynamic>))
.toList();
return teamWorkList;
} else {
return null;
}
}
//work
Future<List<Work>?> getALlTeamWorkList() async {
final response = await http.get(
Uri.parse(baseUrl + 'get_work'),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
},
);
final jsonResponse = json.decode(response.body);
if (jsonResponse['code'] == 200) {
List<Work> teamWorkList = (jsonResponse['data'] as List)
.map((work) => Work.fromJson(work as Map<String, dynamic>))
.toList();
return teamWorkList;
} else {
return null;
}
}
Future<bool> insertTeamWork(List<Work> workList) async {
final response = await http.post(
Uri.parse(baseUrl+'add_work'),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
},
//Mpajson
body: JsonEncoder().convert(
workList.map((work) => work.toMap()).toList(),
)
);
final jsonResponse = json.decode(response.body);
if (jsonResponse['code'] == 200) {
return true;
} else {
print("TeamWork插入失败");
print("body:"+ workList.map((work) => work.toMap()).toList().toString());
return false;
}
}
Future<bool> deleteTeamWork(workId) async {
final response = await http.post(
Uri.parse(baseUrl+'delete_work'),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
},
body: JsonEncoder().convert({
'workId': workId, //
}),
);
final jsonResponse = json.decode(response.body);
if (jsonResponse['code'] == 200) {
return true;
} else {
return false;
}
}
//server todo
Future<List<FreeTime>?> getFreeTime(int teamid) async {
final response = await http.get(
Uri.parse(baseUrl + 'get_freeTime').replace(queryParameters: {'teamId': teamid.toString()}),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
},
);
final jsonResponse = json.decode(response.body);
if (jsonResponse['code'] == 200) {
List<FreeTime> freeTimeList = (jsonResponse['data'] as List)
.map((freeTime) => FreeTime.fromJson(freeTime as Map<String, dynamic>))
.toList();
return freeTimeList;
} else {
print("获取空闲时间失败");
return null;
}
}
//--------------------------------------------------
Future<List<Course>?> getCourseList(int userId) async {
final response = await http.get(
Uri.parse(baseUrl + 'get_course').replace(queryParameters: {'userId': userId.toString()}),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
},
);
final jsonResponse = json.decode(response.body);
if (jsonResponse['code'] == 200) {
List<Course> courseList = (jsonResponse['data'] as List)
.map((course) => Course.fromJson(course as Map<String, dynamic>))
.toList();
return courseList;
} else {
print("获取课程失败");
return null;
}
}
Future<bool> insertCourseList(List<Course> courseList) async {
final response = await http.post(
Uri.parse(baseUrl+'add_course'),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
},
body: jsonEncode(courseList.map((course) => course.toMap()).toList()),
);
final jsonResponse = json.decode(response.body);
if (jsonResponse['code'] == 200) {
return true;
} else {
print("插入课程失败");
return false;
}
}
Future<bool> updateCourse(List<Course> courseList) async {
final response = await http.post(
Uri.parse(baseUrl+'update_course'),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
},
body: jsonEncode(courseList.map((course) => course.toMap()).toList()),
);
final jsonResponse = json.decode(response.body);
if (jsonResponse['code'] == 200) {
return true;
} else {
print("更新课程失败");
return false;
}
}
Future<bool> deleteCourse(courseId) async {
final response = await http.post(
Uri.parse(baseUrl+'delete_course'),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
},
body: jsonEncode({'courseId': courseId}),
);
final jsonResponse = json.decode(response.body);
if (jsonResponse['code'] == 200) {
return true;
} else {
print("删除课程失败");
return false;
}
}
//--------------------------------------------------
Future<List<Task>?> getTaskList(int userId) async {
final response = await http.get(
Uri.parse(baseUrl + 'get_task').replace(queryParameters: {'userId': userId.toString()}),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
},
);
final jsonResponse = json.decode(response.body);
if (jsonResponse['code'] == 200) {
List<Task> taskList = (jsonResponse['data'] as List)
.map((task) => Task.fromJson(task as Map<String, dynamic>))
.toList();
return taskList;
} else {
print("获取个人计划失败");
return null;
}
}
Future<bool> updateTask(List<Work> taskList) async {
final response = await http.post(
Uri.parse(baseUrl+'update_task'),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
},
body: jsonEncode(taskList.map((work) => work.toMap()).toList()),
);
final jsonResponse = json.decode(response.body);
if (jsonResponse['code'] == 200) {
return true;
} else {
print("更新个人计划失败");
return false;
}
}
Future<bool> insertTask(List<Task> taskList) async {
final response = await http.post(
Uri.parse(baseUrl+'add_task'),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
},
body: jsonEncode(taskList.map((task) => task.toMap()).toList()),
);
final jsonResponse = json.decode(response.body);
if (jsonResponse['code'] == 200) {
return true;
} else {
print("插入个人计划失败");
return false;
}
}
Future<bool> deleteTask(taskId) async {
final response = await http.post(
Uri.parse(baseUrl+'delete_task'),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
},
body: jsonEncode({'taskId': taskId}),
);
final jsonResponse = json.decode(response.body);
if (jsonResponse['code'] == 200) {
return true;
} else {
print("删除个人计划失败");
return false;
}
}
//--------------------------------------------------
Future<String ?> getUserCoursejson(int userId, String passwd, int year, int term) async {
final response = await http.get(
Uri.parse(baseUrl+'get_all_course').replace(queryParameters: {
'userId': userId.toString(),
'passwd': passwd,
'year': year.toString(),
'term': term.toString(),
}),
);
final jsonResponse = json.decode(response.body);
//res
String resJson = jsonResponse['data'];
//res
//
String jsonString = resJson;
//
jsonString = jsonString.trim().replaceAll(RegExp(r"^\{|\}$"), '');
// 使 JSON
jsonString = jsonString.replaceAll(RegExp(r"'"), '"');
// JSON
Map<String, dynamic> data = Map<String, dynamic>.from(json.decode('{$jsonString}'));
if(data['code'] == 1000){
return resJson;
}else{
print("获取导入课程失败");
return null;
}
}
Future<String> getText() async{
final response=await http.get(Uri.parse("https://api.xygeng.cn/one"));
final jsonResponse = json.decode(response.body);
String content=jsonResponse['data']['content'];
print(content);
return content;
}
}
import 'dart:async';
import 'dart:async';
import 'dart:io';
import '../entity/Course.dart';
import '../entity/Team.dart';
import '../entity/User.dart';
import '../entity/Work.dart';
class NetWorkController{
final httpClient = HttpClient();
final Uri baseUri=Uri(scheme: "http", host: "www.tianqiapi.com",path:'/api/' , queryParameters: {
"version":"v1",
"appid":"97799796",
"appsecret":"mN3u09pY",
});
Future<int> login(User user) async {
return Future(() => 1);
}
Future<int> register(User user) async {
return Future(() => 1);
}
Future<List<Work>> getSameFreeWork(int teamid){
List<Work> workList = [];
return Future(() => workList);
}
Future<List<Work>> getTeamWorkList (int teamid){
List<Work> workList = [];
return Future(() => workList);
}
Future<List<Team>> getTeamList(int userid){
List<Team> teamList = [];
return Future(() => teamList);
}
Future<bool> insertTeam(Team team) async {
return true;
}
Future<bool> deleteTeam(int teamid) async {
return true;
}
Future<bool> updateTeam(Team team) async {
return true;
}
Future<List<User>> getTeamUserList(int teamid) async {
List<User> userList = [];
return userList;
}
Future<bool> insertTeamUser(int teamid,int userid) async {
return true;
}
Future<bool> deleteTeamUser(int teamid,int userid) async {
return true;
}
//todo
// Future<bool> deleteTeamUser(int teamid,int userid) async {
// return true;
// }
//app,
Future<bool> updateCourse(List<Course> courseList) async {
return true;
}
Future<bool> updateTask(List<Work> workList) async {
return true;
}
Future<String> getUserCoursejson(int stuid,String passwd,int year, int term){
String res = "";
return Future(() => res);
}
}

@ -1,128 +0,0 @@
import 'package:timemanagerapp/entity/ScheduleForm.dart';
import '../database/dao/TaskDao.dart';
import '../entity/Task.dart';
import '../setting/Setting.dart';
import '../util/dataUtil.dart';
import 'NetWorkController.dart';
class TaskController {
static IdGenerator idGenerator = IdGenerator();
static List<Task> taskList = []; //taskList
static NetWorkController netWorkController = NetWorkController();
static late TaskDao taskDao;
DateTime termstartdate = Setting.startdate; //Setting.getStartDate();
TaskController(){
taskDao = TaskDao();
}
Future<List<Task>> init() async {
var res = await netWorkController.getTaskList(Setting.user!.getId!);
if(res == null || res.length == 0){
taskList = [];
}else{
taskList = res;
}
for(Task task in taskList){
await taskDao.insertTask(task);
}
return taskList;
}
Future<void> dispos() async {
taskDao.deleteAllTasks();
}
Future<List<Task>> getTasks() async {
List<Map<String, dynamic>> taskMaps = await taskDao.getTasks();
List<Task> tasks = []; // Task
for (var taskMap in taskMaps) {
// 使TaskMapTask
Task task = Task(
id: taskMap['id'],
userId: taskMap['userId'],
content: taskMap['content'],
taskId: taskMap['taskId'],
name: taskMap['name'],
startTime: DateTime.parse(taskMap['startTime']),
endTime: DateTime.parse(taskMap['endTime']),
);
tasks.add(task);
}
taskList = tasks; // Task
return taskList;
}
//addscheduleForm
Future<void> addScheduleForm(ScheduleForm scheduleForm) async {
List<Task> taskListToInsert = [];
int allTaskId = await idGenerator.generateId();
for (int week = scheduleForm.getStartWeek; week <= scheduleForm.getEndWeek; week++) {
for (int day in scheduleForm.selectedDays) {
//
final startDate = termstartdate.add(Duration(
days: (7 * (week - 1) + day! - 1),
hours: scheduleForm.getStartTime.hour,
minutes: scheduleForm.getStartTime.minute
));
final endDate = termstartdate.add(Duration(
days: (7 * (week - 1) + day! - 1),
hours: scheduleForm.getEndTime.hour,
minutes: scheduleForm.getEndTime.minute,
));
Task task = Task(
id: await idGenerator.generateId(),
name: scheduleForm.getName,
userId: Setting.user!.getId!,
content: scheduleForm.getContent,
taskId: allTaskId,
startTime: startDate,
endTime: endDate,
);
taskListToInsert.add(task);
}
}
await insertTaskList(taskListToInsert);
}
Future<int> insertTask(Task task) async {
netWorkController.insertTask([task]);
return await taskDao.insertTask(task);
}
Future<int> insertTaskList(List<Task> taskList) async {
netWorkController.insertTask(taskList);
int result = 0;
for (Task task in taskList) {
result += await taskDao.insertTask(task);
}
return result;
}
//delete
Future<int> deleteTaskByid(int id) async {
return await taskDao.deleteTaskByid(id);
}
Future<int> deleteTaskByTaskid(int taskId) async {
netWorkController.deleteTask(taskId);
return await taskDao.deleteTaskByTaskid(taskId);
}
Future<int> deleteAllTasks() async {
// netWorkController.deleteTask(taskId);
return await taskDao.deleteAllTasks();
}
//update
Future<int> updateTask(Task task) async {
return await taskDao.updateTask(task);
}
}

@ -1,272 +1,88 @@
import 'package:timemanagerapp/controller/NetWorkController.dart';
import 'package:timemanagerapp/entity/User.dart';
import '../entity/FreeTime.dart';
import '../entity/ScheduleForm.dart';
import '../entity/Team.dart';
import '../entity/Work.dart';
import 'package:timemanagerapp/database/dao/TeamDao.dart';
import 'package:timemanagerapp/database/dao/WorkDao.dart';
import '../setting/Setting.dart';
import '../util/dataUtil.dart';
class TeamController {
late int leaderid;
static List<Team> allTeamList = []; //allTeamList
static List<Team> myTeamList = []; //myTeamList
static List<Team> joindedTeamList = []; //teamList
static List<Work> workList = []; //workList
static Map<int,Work> worKIdMap = {};
static Map<int,Team> teamIdMap = {};
static Map<int,List<Work>> woroListMapByTeamId = {};
static Map<int,List<User>> userListMapByTeamId = {};
static NetWorkController netWorkController = NetWorkController();
static IdGenerator idGenerator = IdGenerator();
DateTime termstartdate = Setting.startdate; //Setting.getStartDate();
TeamController() { //leaderidid
this.leaderid = Setting.user!.getId!;
//TODO: leaderidmyTeamList
for (var team in myTeamList) {
//TODO: team.idWorklist[team.id]
//Wordmaplist[team.id].add()
}
}
//-----------------------------------Team-------------------------------
// Future<void> deleteAllTeams() async {
// await netWorkController.deleteAllTeams();
// }
Future<List<Team>> getMyTeamList() async {
//
myTeamList = [];
List<Team>? res = await netWorkController.getMyTeamList(Setting.user!.getId!);
if(res==null){
return [];
}else{
// teamIdMap = {};
// for(Team team in res){
// teamIdMap[team.id!] = team;
// }
myTeamList = res;
return res;
}
}
Future<List<Team>> getJoinedTeamList() async {
if(myTeamList.length==0){
await getMyTeamList();
}
//
joindedTeamList = [];
allTeamList = [];
List<Team>? res = await netWorkController.getAllTeamListByUserId(Setting.user!.getId!);
if(res==null){
return [];
}else{
allTeamList = res;
teamIdMap = {};
for(Team team in allTeamList){
teamIdMap[team.id!] = team;
}
joindedTeamList.addAll(allTeamList); //=
for(Team team in myTeamList){
// myTeamList
joindedTeamList.removeWhere((element) => element.id == team.id);
}
return joindedTeamList;
}
}
// Future<void> insertTeamList(List<Team> myTeamList) async {
// for (Team team in myTeamList) {
// await netWorkController.insertTeam(team);
// }
// }
Future<bool> deleteTeam(Team team) async {
// List<User> memberList = await getTeamUserList(team.getId!); //
// for(User user in memberList){
// deleteTeamUser(team, user.getId!);
// }
return await netWorkController.deleteTeam(team.getId!);
}
Future<bool> insertTeam(Team team) async {
team.id = await idGenerator.generateId();
bool res = await netWorkController.insertTeam(team);
print("insertTeam: $res");
if(res == false) return false;
//
int id = await idGenerator.generateId();
await netWorkController.insertTeamUser(id,team.id!, Setting.user!.getUsername!);
return true;
}
//joinTeam
Future<bool> joinTeam(String teamName) async {
//
for(Team team in allTeamList){
if(team.getTeamName == teamName){
return false;
}
}
Team ? team = await netWorkController.getTeamByTeamName(teamName);
if(team == null){
return false;
}
int id = await idGenerator.generateId();
return await netWorkController.insertTeamUser(id,team!.getId!, Setting.user!.getUsername!);
}
Future<bool> updateTeam(Team team) async {
return await netWorkController.updateTeam(team);
}
//------------------------------------TeamUser-------------------------------------
Future<List<User>> getTeamUserList(int teamid) async {
List<User>? res = await netWorkController.getTeamUserList(teamid);
if(res == null){
return [];
}else{
List<User> tmp = [];
for(User user in res){
if(user.getId != Setting.user!.getId!){ //
tmp.add(user);
}
}
res = tmp;
userListMapByTeamId[teamid] = res;
return res;
}
}
Future<bool> insertTeamUser(int teamid, String membername) async {
if(membername == Setting.user!.getUsername){//
return false;
}
int id = await idGenerator.generateId();
return await netWorkController.insertTeamUser(id,teamid, membername);
}
Future<bool> deleteTeamUser(Team team, int userId) async {
if(team.getLeaderId == userId){
return await deleteTeam(team);
}else{
return await netWorkController.deleteTeamUser(team.getId!, userId);
}
}
//---------------------------Work----------------------
Future<List<Work>> getWorks() async {
workList = [];
// myTeamList = [];
// joindedTeamList = [];
// myTeamList = await getMyTeamList();
// joindedTeamList = await getJoinedTeamList();
// allTeamList = myTeamList + joindedTeamList;
var res = await getJoinedTeamList(); //team,
if(res == null) {
return [];
}
for(Team team in allTeamList){
workList.addAll(await getWorksByTeamId(team.id));
}
return workList;
}
Future<List<Work>> getWorksByTeamId(teamId) async {
var res = await netWorkController.getTeamWorkList(teamId);
if(res == null){
return [];
}else{
woroListMapByTeamId[teamId] = [];
for(int index = 0; index < res.length; index++){
res[index].teamName = teamIdMap[teamId]!.getTeamName;
woroListMapByTeamId[teamId]!.add(res[index]);
}
return res;
}
}
//addscheduleForm
Future<void> addScheduleForm(ScheduleForm scheduleForm,int teamId) async {
List<Work> WorkListToInsert = [];
int allWorkId = await idGenerator.generateId();
for (int week = scheduleForm.getStartWeek; week <= scheduleForm.getEndWeek; week++) {
for (int day in scheduleForm.selectedDays) {
//
final startDate = termstartdate.add(Duration(
days: (7 * (week - 1) + day! - 1),
hours: scheduleForm.getStartTime.hour,
minutes: scheduleForm.getStartTime.minute
));
final endDate = termstartdate.add(Duration(
days: (7 * (week - 1) + day! - 1),
hours: scheduleForm.getEndTime.hour,
minutes: scheduleForm.getEndTime.minute,
));
Work work = Work(
id: await idGenerator.generateId(),
name: scheduleForm.getName,
workId: allWorkId,
userId: Setting.user!.getId!,
status: "未完成",
content: scheduleForm.getContent,
teamId: teamId,
endTime: endDate,
startTime: startDate,
);
WorkListToInsert.add(work);
}
}
await insertWorkList(WorkListToInsert);
}
//
// Future<bool> insertWork(Work work) async {
// return await netWorkController.insertTeamWork(work);
// }
Future<void> insertWorkList(List<Work> workList) async {
// for (Work work in workList) {
await netWorkController.insertTeamWork(workList);
// }
}
// Future<void> deleteAllWorks() async {
// await netWorkController.deleteAllWorks();
// }
Future<void> deleteWorkByWorkId(int workId) async {
await netWorkController.deleteTeamWork(workId);
}
// Future<void> updateWork(Work work) async {
// await netWorkController.u(work);
// }
Future<List<FreeTime>> getFreeTime(int teamid)async{
var res = await netWorkController.getFreeTime(teamid);
if(res == null){
return [];
}else{
return res;
}
}
}
import 'package:timemanagerapp/controller/NetWorkController.dart';
import '../entity/Team.dart';
import '../entity/Work.dart';
import 'package:timemanagerapp/database/dao/TeamDao.dart';
import 'package:timemanagerapp/database/dao/WorkDao.dart';
class TeamController {
late int leaderid;
List<Team> teamList = []; //teamList
Map<int, List<Work>> Wordmaplist = {};
NetWorkController netWorkController = NetWorkController();
TeamController(int leaderid) {
this.leaderid = leaderid;
//TODO: leaderidteamList
for (var team in teamList) {
//TODO: team.idWorklist[team.id]
//Wordmaplist[team.id].add()
}
}
Future<List<Team>> getTeams(int userid) async {
return await netWorkController.getTeamList(userid);
}
Future<bool> createTeam(Team team) async {
return await netWorkController.insertTeam(team);
}
Future<void> insertTeamList(List<Team> teamList) async {
for (Team team in teamList) {
await TeamDao().insertTeam(team);
}
}
Future<void> deleteAllTeams() async {
await TeamDao().deleteAllTeams();
}
Future<bool> deleteTeam(int teamid) async {
return await netWorkController.deleteTeam(teamid);
}
Future<bool> updateTeam(Team team) async {
return await netWorkController.updateTeam(team);
}
Future<void> insertWork(Work work) async {
// return await netWorkController.insertWork(work);
}
Future<void> insertWorkList(List<Work> workList) async {
for (Work work in workList) {
await WorkDao().insertWork(work);
}
}
Future<void> deleteAllWorks() async {
await WorkDao().deleteAllWorks();
}
Future<void> deleteWork(int id) async {
await WorkDao().deleteWorkByid(id);
}
Future<void> updateWork(Work work) async {
await WorkDao().updateWork(work);
}
Future<List<Map<String, dynamic>>> getWorks() async {
return WorkDao().getWorks();
}
Future<List<Map<String, dynamic>>> getWorksByTeamid(int teamid) async {
return WorkDao().getWorksByTeamid(teamid);
}
Future<List<Work>> getSameFreeWork(int teamid){
return netWorkController.getSameFreeWork(teamid);
}
}

@ -1,196 +0,0 @@
import 'dart:ui';
import 'package:timemanagerapp/entity/Course.dart';
import 'package:timemanagerapp/entity/FreeTime.dart';
import 'package:timemanagerapp/setting/Setting.dart';
class TimetableWidgetController {
static late DateTime mondayTime = getmondayTime();
static late int weekCount = getWeekCount();
static late DateTime termStartDate = Setting.startdate;
static List<DateTime> timePoints = [
DateTime(2023, 9, 22, 7, 00),
DateTime(2023, 9, 22, 7, 30),
DateTime(2023, 9, 22, 8, 0), // 8:00 AM
DateTime(2023, 9, 22, 9, 35), // 8:15 PM
DateTime(2023, 9, 22, 10, 5),
DateTime(2023, 9, 22, 11, 40),
DateTime(2023, 9, 22, 12, 30),
DateTime(2023, 9, 22, 13, 30),
DateTime(2023, 9, 22, 15, 5), // 8:00 AM
DateTime(2023, 9, 22, 15, 35), // 12:30 PM
DateTime(2023, 9, 22, 17, 10),
DateTime(2023, 9, 22, 18, 30),
DateTime(2023, 9, 22, 19, 15), // 8:00 AM
DateTime(2023, 9, 22, 20, 5), // 12:30 PM
DateTime(2023, 9, 22, 20, 55),
DateTime(2023, 9, 22, 21, 40),
DateTime(2023, 9, 22, 23, 00),
];
TimetableWidgetController() {
mondayTime = getmondayTime();
termStartDate = Setting.startdate;
weekCount = getWeekCount();
}
//getInstance
static TimetableWidgetController getInstance() {
return new TimetableWidgetController();
}
//piexl
static List<Offset> convertTimeList(List<DateTime> timePoints) {
print("deviceWidth: ${Setting.deviceWidth.toString()}");
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 * Setting.pixelToMinuteRatio_ratio;
convertedTimes.add(Offset(Setting.deviceWidth * 0.015, convertedTime));
}
// print("convertedTimesOffset: $convertedTimes");
return convertedTimes;
}
//
List<FreeTime> repairFreeTimeBlockList(List freeTimeBlockList) {
List<FreeTime> repairedFreeTimeBlockList = [];
DateTime termStartDate = Setting.startdate;
DateTime termEndDate = termStartDate.add(Duration(days: 7 * Setting.termAllWeekCout));
//termEndDate23:00:00
termEndDate = DateTime(termEndDate.year, termEndDate.month, termEndDate.day, 23, 00, 00);
Set<DateTime> freeTimeBlockSet = {}; //,
for (var freeTimeBlock in freeTimeBlockList) {
//,
//
bool keepFlag = true;
if(freeTimeBlock.startTime.isBefore(termStartDate)){
keepFlag = false;
}
if(freeTimeBlock.endTime.isAfter(termEndDate)){
keepFlag = false;
}
if (freeTimeBlock.startTime.hour < 7) {
keepFlag = false;
}
if (freeTimeBlock.endTime.hour > 23) {
keepFlag = false;
}
// if(freeTimeBlock.startTime.compareTo(freeTimeBlock.endTime)==0){ //
// keepFlag = false; //,,freeTimeBlockSet,
// freeTimeBlockSet.add(DateTime(freeTimeBlock.startTime.year, freeTimeBlock.startTime.month, freeTimeBlock.startTime.day));
// }
if(keepFlag){
freeTimeBlockSet.add(DateTime(freeTimeBlock.startTime.year, freeTimeBlock.startTime.month, freeTimeBlock.startTime.day));
repairedFreeTimeBlockList.add(freeTimeBlock);
}else{
freeTimeBlockList.remove(freeTimeBlock);
}
}
//
for(var date = termStartDate; date.isBefore(termEndDate); date = date.add(Duration(days: 1))){
date = DateTime(date.year, date.month, date.day);
if(freeTimeBlockSet.contains(date)){
//,
continue;
}
DateTime startTime = DateTime(date.year, date.month, date.day, 7, 0);
DateTime endTime = DateTime(date.year, date.month, date.day, 23, 0);
FreeTime freeTime = FreeTime(startTime: startTime, endTime: endTime);
repairedFreeTimeBlockList.add(freeTime);
}
return repairedFreeTimeBlockList;
}
static int getWeekCount({DateTime ? dateTime}) {
dateTime ??= DateTime.now();
weekCount = dateTime.difference(termStartDate).inDays ~/ 7 + 1;
return weekCount;
}
static DateTime getmondayTime() {
mondayTime = DateTime.now();
print("获取mondayTime: $mondayTime");
//
while (mondayTime.weekday != 1) {
mondayTime = mondayTime.subtract(Duration(days: 1));
}
return mondayTime;
}
static List<String> getSelectDayList(DateTime date) {
List<String> selectedDayList = [];
//dataselectedDayList
int day = date.weekday;
switch (day) {
case 1:
selectedDayList.add("周一");
break;
case 2:
selectedDayList.add("周二");
break;
case 3:
selectedDayList.add("周三");
break;
case 4:
selectedDayList.add("周四");
break;
case 5:
selectedDayList.add("周五");
break;
case 6:
selectedDayList.add("周六");
break;
case 7:
selectedDayList.add("周日");
break;
}
return selectedDayList;
}
Map<int, List> transformTimeBlockMap(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,0.12,0.24,0.36,0.48,0.60,0.72];
// Course(this.name, this.teacher, this.location, this.startTime, this.endTime);
double getdy(timeBlock)
{
//9
double y=((timeBlock.startTime.hour-7)*60+timeBlock.startTime.minute)*Setting.pixelToMinuteRatio_ratio + 9;
return y;
}
double getdx(timeBlock)
{
int x=timeBlock.startTime.weekday-1;
return Setting.deviceWidth*weekListPixel[x].toDouble();
}
double getHeight(timeBlock){
return ((timeBlock.endTime.hour*60+timeBlock.endTime.minute)-(timeBlock.startTime.hour*60+timeBlock.startTime.minute))*Setting.pixelToMinuteRatio_ratio;
}
}

@ -1,117 +1,51 @@
import 'package:timemanagerapp/database/dao/UserDao.dart';
import 'package:timemanagerapp/database/MyDatebase.dart';
import 'package:timemanagerapp/entity/User.dart';
import '../provider/TimeProvider.dart';
import '../setting/Setting.dart';
import '../util/dataUtil.dart';
import 'CourseController.dart';
import 'NetWorkController.dart';
import 'TaskController.dart';
/**
*
*/
class UserController {
static NetWorkController netWorkController = NetWorkController();
static IdGenerator idGenerator = IdGenerator();
//
static UserController getInstance() {
return new UserController();
}
//getUserList
Future<List<User>> getUserList() async {
List<User>? res = await netWorkController.getUserList();
if(res==null){
return [];
}else{
return res;
}
}
Future<bool> login(User login_user) async {
//todo:
User ?user = await netWorkController.login(login_user);
//
// int userid = Setting.user!.getId!;
if(user == null){
return false;
}
await Setting.saveUser(user);
//
if(Setting.initFlag) {
//
await MyDatabase.reBuildDatabase();
print('从服务器初始化');
await CourseController().init();
await TaskController().init();
await Setting.saveInitFlag(false);
}
return true;
}
Future<bool> register(User postUser) async {
//todo:
int userid = await idGenerator.generateId();
postUser.id = userid;
bool res = await netWorkController.register(postUser);
//
if(!res){
print('注册失败');
return false;
}
//
// await Setting.saveUser(postUser);
//todo:
return true;
}
//updateUser
Future<bool> updateUser(User postUser) async {
bool res = await netWorkController.updateUser(postUser);
if( !res ){
return false;
}else{
await Setting.saveUser(postUser);
return true;
}
}
// //
// Future<bool> deleteUser(User postUser) async {
// //todo:
// int userid = await idGenerator.generateId();
// postUser.id = userid;
// bool res = await netWorkController.register(postUser);
// //
// if(!res){
// print('注册失败');
// return false;
// }
// //
// // await Setting.saveUser(postUser);
// //todo:
// return true;
// }
Future<void> insertUser(User user) async {
await UserDao.getInstance().insertUser(user);
}
Future<void> insertUserList(List<User> userList) async {
for (User user in userList) {
await UserDao.getInstance().insertUser(user);
}
}
//deleteAllUsers
Future<void> deleteAllUsers() async {
await UserDao.getInstance().deleteAllUsers();
}
}
import 'package:timemanagerapp/database/dao/UserDao.dart';
import 'package:timemanagerapp/database/MyDatebase.dart';
import 'package:timemanagerapp/entity/User.dart';
import '../setting/Setting.dart';
import 'NetWorkController.dart';
/**
*
*/
class UserController {
NetWorkController netWorkController = NetWorkController();
//
static UserController getInstance() {
return new UserController();
}
Future<List<Map<String, dynamic>>> getUsers() async {
return await UserDao.getInstance().getUsers();
}
Future<bool> login(User user) async {
int userid = await netWorkController.login(user);
user.id = userid;
await Setting.saveUser(user);
return true;
}
Future<bool> register(User user) async {
int userid = await netWorkController.register(user);
user.id = userid;
await Setting.saveUser(user);
return true;
}
Future<void> insertUser(User user) async {
await UserDao.getInstance().insertUser(user);
}
Future<void> insertUserList(List<User> userList) async {
for (User user in userList) {
await UserDao.getInstance().insertUser(user);
}
}
//deleteAllUsers
Future<void> deleteAllUsers() async {
await UserDao.getInstance().deleteAllUsers();
}
}

@ -1,133 +0,0 @@
// import 'package:timemanagerapp/entity/ScheduleForm.dart';
//
// import '../database/dao/WorkDao.dart';
// import '../entity/Work.dart';
// import '../setting/Setting.dart';
// import '../util/dataUtil.dart';
// import 'NetWorkController.dart';
//
// class WorkController {
// static IdGenerator idGenerator = IdGenerator();
// static List<Work> WorkList = []; //courseList
// static NetWorkController netWorkController = NetWorkController();
//
// DateTime termstartdate = Setting.startdate; //Setting.getStartDate();
//
// Future<List<Work>> getWorks() async {
// //todo http
// List<Map<String, dynamic>> workMaps = await WorkDao().getWorks();
// List<Work> Works = []; // Work
//
// for (var workMap in workMaps) {
// // 使WorkMapWork
// Work work = Work(
// id: workMap['id'],
// userId: workMap['userId'],
// content: workMap['content'],
// workId: workMap['workId'],
// name: workMap['name'],
// startTime: DateTime.parse(workMap['startTime']),
// endTime: DateTime.parse(workMap['endTime']),
// status: workMap['status'],
// teamId: workMap['teamId'],
// );
// Works.add(work);
// }
// WorkList = Works; // Work
// return WorkList;
// }
//
// //addscheduleForm
// Future<void> addScheduleForm(ScheduleForm scheduleForm,int teamId) async {
// List<Work> WorkListToInsert = [];
// int allWorkId = await idGenerator.generateId();
// for (int week = scheduleForm.getStartWeek; week <= scheduleForm.getEndWeek; week++) {
// for (int day in scheduleForm.selectedDays) {
// //
// final startDate = termstartdate.add(Duration(
// days: (7 * (week - 1) + day! - 1),
// hours: scheduleForm.getStartTime.hour,
// minutes: scheduleForm.getStartTime.minute
// ));
//
// final endDate = termstartdate.add(Duration(
// days: (7 * (week - 1) + day! - 1),
// hours: scheduleForm.getEndTime.hour,
// minutes: scheduleForm.getEndTime.minute,
// ));
// Work work = Work(
// id: await idGenerator.generateId(),
// name: scheduleForm.getName,
// workId: allWorkId,
// userId: Setting.user!.getId!,
// status: "未完成",
// content: scheduleForm.getContent,
// teamId: teamId,
// endTime: endDate,
// startTime: startDate,
// );
// WorkListToInsert.add(work);
// }
// }
// await insertWorkList(WorkListToInsert);
// }
//
// Future<int> insertWork(Work Work) async {
// return await WorkDao().insertWork(Work);
// }
//
// Future<int> insertWorkList(List<Work> workList) async {
// int result = 0;
// for (Work work in workList) {
// result += await WorkDao().insertWork(work);
// }
// return result;
// }
//
// //仿Taskwork
// //query
// Future<List<Work>> getWorkList() async {
// List<Map<String, dynamic>> workMaps = await WorkDao().getWorks();
// List<Work> workList = []; // Work
//
// for (var workMap in workMaps) {
// // 使WorkMapWork
// Work work = Work(
// id: workMap['id'],
// userId: workMap['userId'],
// content: workMap['content'],
// workId: workMap['workId'],
// name: workMap['name'],
// startTime: DateTime.parse(workMap['startTime']),
// endTime: DateTime.parse(workMap['endTime']),
// status: workMap['status'],
// teamId: workMap['teamId'],
// );
// workList.add(work);
// }
// WorkList = workList; // Work
// return WorkList;
// }
//
// // //delete 仿Task
// // Future<int> deleteWorkByid(int id) async{
// // return await WorkDao().deleteWorkByid(id);
// // }
//
//
// Future<int> deleteWorkByWorkid(int workid) async {
// return await WorkDao().deleteWorkByWorkid(workid);
// }
//
// Future<int> deleteAllWorks() async {
// return await WorkDao().deleteAllWorks();
// }
//
// //update
// Future<int> updateWork(Work work) async {
// return await WorkDao().updateWork(work);
// }
//
//
//
// }

@ -1,239 +1,161 @@
import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';
import 'dart:async';
import 'package:timemanagerapp/entity/Task.dart';
/**
*
*/
class MyDatabase {
static Future<Database> initDatabase() async {
final databasePath = await getDatabasesPath();
final path = join(databasePath, 'tma.db');
//
//onCreate onCreate
final database =
await openDatabase(path, version: 1, onCreate: _createTables);
//
// await dropAllTables(database);
//
await _createTables(database, 1);
return Future.value(database);
}
static Future<void> _createTables(Database db, int version) async {
// await _createAllTableBySql(db);
print("create table");
//Course
await _createCourseTable(db, version);
// User
await _createUserTable(db, version);
// Work
await _createWorkTable(db, version);
// Clock
await _createClockTable(db, version);
// Task
await _createTaskTable(db, version);
// Team
await _createTeamTable(db, version);
print("create table success");
}
static Future<void> _createAllTableBySql(Database db) async{
//bug:
await db.execute('''
CREATE TABLE IF NOT EXISTS users(
id BIGINT PRIMARY KEY,
username VARCHAR(255) NOT NULL UNIQUE,
password TEXT NOT NULL,
role BIGINT NOT NULL
);
CREATE TABLE IF NOT EXISTS works (
id BIGINT PRIMARY KEY,
userId BIGINT NOT NULL,
workId BIGINT NOT NULL,
teamId BIGINT NOT NULL,
name TEXT NOT NULL,
content TEXT,
status TEXT,
endTime TEXT NOT NULL,
startTime TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS clocks (
id BIGINT PRIMARY KEY,
clockId BIGINT NOT NULL,
userId BIGINT NOT NULL,
text TEXT,
img TEXT,
music TEXT
);
CREATE TABLE IF NOT EXISTS tasks (
id BIGINT PRIMARY KEY,
taskId BIGINT NOT NULL,
userId BIGINT NOT NULL,
content TEXT,
name TEXT NOT NULL,
startTime TEXT NOT NULL,
endTime TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS course(
id BIGINT PRIMARY KEY,
userId BIGINT,
courseId BIGINT NOT NULL,
name TEXT NOT NULL,
credit REAL,
teacher TEXT,
location TEXT,
remark TEXT,
start TEXT NOT NULL,
end TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS teams (
id BIGINT PRIMARY KEY,
leaderId BIGINT NOT NULL,
teamName TEXT NOT NULL,
maxNumber BIGINT,
introduce TEXT
);
CREATE TABLE IF NOT EXISTS userteams (
id BIGINT PRIMARY KEY,
userId BIGINT NOT NULL,
teamId BIGINT NOT NULL
);
''');
}
static Future<void> _createUserTable(Database db, int version) async {
// User
await db.execute('''
CREATE TABLE IF NOT EXISTS users(
id BIGINT PRIMARY KEY,
username VARCHAR(255) NOT NULL,
password TEXT NOT NULL,
role BIGINT NOT NULL
);
''');
// print("userstable create success");
}
static Future<void> _createWorkTable(Database db, int version) async {
// Work
await db.execute('''
CREATE TABLE IF NOT EXISTS works (
id BIGINT PRIMARY KEY,
userId BIGINT NOT NULL,
workId BIGINT NOT NULL,
teamId BIGINT NOT NULL,
name TEXT NOT NULL,
content TEXT,
status TEXT,
endTime TEXT NOT NULL,
startTime TEXT NOT NULL
);
''');
// print("Coursetable create success");
}
static Future<void> _createClockTable(Database db, int version) async {
// Clock
await db.execute('''
CREATE TABLE IF NOT EXISTS clocks (
id BIGINT PRIMARY KEY,
clockId BIGINT NOT NULL,
userId BIGINT NOT NULL,
text TEXT,
img TEXT,
music TEXT
);
''');
}
static Future<void> _createTaskTable(Database db, int version) async {
// Task
await db.execute('''
CREATE TABLE IF NOT EXISTS tasks (
id BIGINT PRIMARY KEY,
taskId BIGINT NOT NULL,
userId BIGINT NOT NULL,
content TEXT,
name TEXT NOT NULL,
startTime TEXT NOT NULL,
endTime TEXT NOT NULL
);
''');
}
static Future<void> _createCourseTable(Database db, int version) async {
// Course
await db.execute('''
CREATE TABLE IF NOT EXISTS course(
id BIGINT PRIMARY KEY,
userId BIGINT,
courseId BIGINT NOT NULL,
name TEXT NOT NULL,
credit REAL,
teacher TEXT,
location TEXT,
remark TEXT,
startTime TEXT NOT NULL,
endTime TEXT NOT NULL
);
''');
}
static Future<void> _createTeamTable(Database db, int version) async {
// Team
await db.execute('''
CREATE TABLE IF NOT EXISTS teams (
id BIGINT PRIMARY KEY,
leaderId BIGINT NOT NULL,
teamName TEXT NOT NULL,
maxNumber BIGINT,
introduce TEXT
);
''');
}
static Future<void> _createUserTeamTable(Database db, int version) async {
// userTeam
await db.execute('''
CREATE TABLE IF NOT EXISTS userteams (
id BIGINT PRIMARY KEY,
userId BIGINT NOT NULL,
teamId BIGINT NOT NULL
);
''');
}
//
static Future<void> dropAllTables(Database database) async {
// SQL
await database.transaction((txn) async {
// 'table1''table2''table3'
await txn.execute('DROP TABLE IF EXISTS users');
await txn.execute('DROP TABLE IF EXISTS clocks');
await txn.execute('DROP TABLE IF EXISTS tasks');
await txn.execute('DROP TABLE IF EXISTS works');
await txn.execute('DROP TABLE IF EXISTS course');
await txn.execute('DROP TABLE IF EXISTS teams');
await txn.execute('DROP TABLE IF EXISTS userteams');
});
}
static Future<void> reBuildDatabase() async {
final databasePath = await getDatabasesPath();
final path = join(databasePath, 'tma.db');
final database =
await openDatabase(path, version: 1, onCreate: _createTables);
await dropAllTables(database);
await _createTables(database, 1);
}
}
import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';
import 'dart:async';
import 'package:timemanagerapp/entity/Task.dart';
/**
*
*/
class MyDatabase {
static Future<Database> initDatabase() async {
final databasePath = await getDatabasesPath();
final path = join(databasePath, 'tma.db');
//
//onCreate onCreate
final database =
await openDatabase(path, version: 1, onCreate: _createTables);
// //
// await _dropAllTables(database);
//
await _createTables(database, 1);
return Future.value(database);
}
static Future<void> _createTables(Database db, int version) async {
//Course
await _createCourseTable(db, version);
// User
await _createUserTable(db, version);
// Work
await _createWorkTable(db, version);
// Clock
await _createClockTable(db, version);
// Task
await _createTaskTable(db, version);
// Team
await _createTeamTable(db, version);
}
static Future<void> _createUserTable(Database db, int version) async {
// User
await db.execute('''
CREATE TABLE IF NOT EXISTS users(
id INTEGER PRIMARY KEY,
username TEXT NOT NULL,
password TEXT NOT NULL,
role INTEGER NOT NULL
);
''');
print("userstable create success");
}
static Future<void> _createWorkTable(Database db, int version) async {
// Work
await db.execute('''
CREATE TABLE IF NOT EXISTS works (
id INTEGER PRIMARY KEY,
userId INTEGER NOT NULL,
workId INTEGER NOT NULL,
teamId INTEGER NOT NULL,
status TEXT NOT NULL,
workContent TEXT NOT NULL,
functionaryId INTEGER NOT NULL,
endTime TEXT NOT NULL,
startTime TEXT NOT NULL
);
''');
print("Coursetable create success");
}
static Future<void> _createClockTable(Database db, int version) async {
// Clock
await db.execute('''
CREATE TABLE IF NOT EXISTS clocks (
id INTEGER PRIMARY KEY,
clockId INTEGER NOT NULL,
userId INTEGER NOT NULL,
text TEXT NOT NULL,
img TEXT NOT NULL,
music TEXT NOT NULL
);
''');
}
static Future<void> _createTaskTable(Database db, int version) async {
// Task
await db.execute('''
CREATE TABLE IF NOT EXISTS tasks (
id INTEGER PRIMARY KEY,
taskId INTEGER NOT NULL,
userId INTEGER NOT NULL,
content TEXT NOT NULL,
name TEXT NOT NULL,
startTime TEXT NOT NULL,
endTime TEXT NOT NULL
);
''');
}
static Future<void> _createCourseTable(Database db, int version) async {
// Course
await db.execute('''
CREATE TABLE IF NOT EXISTS course(
id INTEGER PRIMARY KEY,
userId INTEGER,
courseId INTEGER NOT NULL,
name TEXT NOT NULL,
credit REAL NOT NULL,
teacher TEXT NOT NULL,
location TEXT NOT NULL,
remark TEXT NOT NULL,
start TEXT NOT NULL,
end TEXT NOT NULL
);
''');
}
static Future<void> _createTeamTable(Database db, int version) async {
// Team
await db.execute('''
CREATE TABLE IF NOT EXISTS teams (
id INTEGER PRIMARY KEY,
leaderId INTEGER NOT NULL,
teamName TEXT NOT NULL,
maxNumber INTEGER NOT NULL,
introduce TEXT
);
''');
}
static Future<void> _createUserTeamTable(Database db, int version) async {
// userTeam
await db.execute('''
CREATE TABLE IF NOT EXISTS userteams (
id INTEGER PRIMARY KEY,
userId INTEGER NOT NULL,
teamId INTEGER NOT NULL
);
''');
}
//
static Future<void> _dropAllTables(Database database) async {
// SQL
await database.transaction((txn) async {
// 'table1''table2''table3'
await txn.execute('DROP TABLE IF EXISTS users');
await txn.execute('DROP TABLE IF EXISTS clocks');
await txn.execute('DROP TABLE IF EXISTS tasks');
await txn.execute('DROP TABLE IF EXISTS works');
await txn.execute('DROP TABLE IF EXISTS course');
await txn.execute('DROP TABLE IF EXISTS teams');
await txn.execute('DROP TABLE IF EXISTS userteams');
});
}
}

@ -1,108 +1,104 @@
import 'package:sqflite/sqflite.dart';
import 'package:timemanagerapp/database/MyDatebase.dart';
import 'package:timemanagerapp/entity/Course.dart';
/**
*
*/
class CourseDao {
late Future<Database> _database;
CourseDao() {
_database = MyDatabase.initDatabase();
}
// MyDatabase.initDatabase()
Future<List<Map<String, dynamic>>> getCourses() async {
final database = await _database;
if (database != null) {
return database.query('course', orderBy: 'id ASC');
// return database.rawQuery('SELECT * FROM course');
} else {
return [];
}
}
Future<int> insertCourse(Course course) async {
final database = await _database;
int result = 0;
if (database != null) {
//
//!!!
var tmp = course.toMap();
result += await database.insert('course', course.toMap());
// 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.startTime}","${course.endTime}")
// ''');
// print("课程插入 : " + course.toString());
}
return result;
}
Future<int> updateCourseById(Course course) async {
final database = await _database;
int result = 0;
if (database != null) {
result += await database
.update('course', course.toMap(), where: 'id = ?', whereArgs: [course.id]);
// result = await txn.rawUpdate('''
// UPDATE course SET userId = ${course.userId},courseId = ${course
// .courseId},name = "${course.name}",credit = ${course
// .credit},teacher = "${course.teacher}",location = "${course
// .location}",remark = "${course.remark}",start = "${course
// .startTime}",end = "${course.endTime}"
// WHERE id = ${course.id}
// ''');
}
return result;
}
Future<int> updateCourseByCourseId(Course course) async {
final database = await _database;
int result = 0;
if (database != null) {
result += await database
.update('course', course.toMap(), where: 'courseId = ?', whereArgs: [course.courseId]);
// result = await txn.rawUpdate('''
// UPDATE course SET userId = ${course.userId},courseId = ${course
// .courseId},name = "${course.name}",credit = ${course
// .credit},teacher = "${course.teacher}",location = "${course
// .location}",remark = "${course.remark}",start = "${course
// .startTime}",end = "${course.endTime}"
// WHERE courseId = ${course.courseId}
// ''');
}
return result;
}
Future<int> deleteCourseById(int id) async {
final database = await _database;
int result = 0;
if (database != null) {
result = await database.delete('course', where: 'id = ?', whereArgs: [id]);
}
return result;
}
Future<int> deleteCourseByCourseId(int courseId) async {
final database = await _database;
int result = 0;
if (database != null) {
result = await database
.delete('course', where: 'courseId = ?', whereArgs: [courseId]);
}
return result;
}
Future<int> deleteAllCourses() async {
final database = await _database;
int result = 0;
if (database != null) {
result = await database.delete('course', where: '1=1');
}
return result;
}
}
import 'package:timemanagerapp/database/MyDatebase.dart';
import 'package:timemanagerapp/entity/Course.dart';
/**
*
*/
class CourseDao {
//
static CourseDao getInstance() {
return new CourseDao();
}
var db = MyDatabase.initDatabase();
Future<List<Map<String, dynamic>>> getCourses() async {
final database = await db;
if (database != null) {
return database.rawQuery('SELECT * FROM course');
} else {
return [];
}
}
Future<int> insertCourse(Course course) async {
final database = await db;
int result = 0;
if (database != null) {
await database.transaction((txn) async {
//
//!!!
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}")
''');
});
// print("课程插入 : " + course.toString());
}
return result;
}
Future<int> updateCourseById(Course course) async {
final database = await db;
int result = 0;
if (database != null) {
await database.transaction((txn) async {
result = await txn.rawUpdate('''
UPDATE course SET userId = ${course.userId},courseId = ${course
.courseId},name = "${course.name}",credit = ${course
.credit},teacher = "${course.teacher}",location = "${course
.location}",remark = "${course.remark}",start = "${course
.start}",end = "${course.end}"
WHERE id = ${course.id}
''');
});
}
return result;
}
Future<int> updateCourseByCourseId(Course course) async {
final database = await db;
int result = 0;
if (database != null) {
await database.transaction((txn) async {
result = await txn.rawUpdate('''
UPDATE course SET userId = ${course.userId},courseId = ${course
.courseId},name = "${course.name}",credit = ${course
.credit},teacher = "${course.teacher}",location = "${course
.location}",remark = "${course.remark}",start = "${course
.start}",end = "${course.end}"
WHERE courseId = ${course.courseId}
''');
});
}
return result;
}
Future<int> deleteCourseById(int id) async {
final database = await db;
int result = 0;
if (database != null) {
result = await database.delete('course', where: 'id = ?', whereArgs: [id]);
}
return result;
}
Future<int> deleteCourseByCourseId(int courseId) async {
final database = await db;
int result = 0;
if (database != null) {
result = await database
.delete('course', where: 'courseId = ?', whereArgs: [courseId]);
}
return result;
}
Future<int> deleteAllCourses() async {
final database = await db;
int result = 0;
if (database != null) {
result = await database.delete('course', where: '1=1');
}
return result;
}
}

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

@ -1,55 +1,55 @@
import 'package:timemanagerapp/database/MyDatebase.dart';
import 'package:timemanagerapp/entity/Team.dart';
/**
*
*/
class TeamDao {
//
static TeamDao getInstance() {
return new TeamDao();
}
var db = MyDatabase.initDatabase();
Future<List<Map<String, dynamic>>> getTeams() async {
final database = await db;
if (database != null) {
return database.query('Team', orderBy: 'id ASC');
} else {
return [];
}
}
Future<void> insertTeam(Team team) async {
final database = await db;
if (database != null) {
await database.insert('Team', team.toMap());
}
}
Future<void> updateTeam(Team team) async {
final database = await db;
if (database != null) {
await database
.update('Team', team.toMap(), where: 'id = ?', whereArgs: [team.id]);
}
}
Future<void> deleteTeamById(int id) async {
final database = await db;
if (database != null) {
await database.delete('Team', where: 'id = ?', whereArgs: [id]);
}
}
Future<void> deleteAllTeams() async {
final database = await db;
if (database != null) {
await database.delete('Team', where: '1=1');
}
}
}
import 'package:timemanagerapp/database/MyDatebase.dart';
import 'package:timemanagerapp/entity/Team.dart';
/**
*
*/
class TeamDao {
//
static TeamDao getInstance() {
return new TeamDao();
}
var db = MyDatabase.initDatabase();
Future<List<Map<String, dynamic>>> getTeams() async {
final database = await db;
if (database != null) {
return database.query('Team', orderBy: 'id ASC');
} else {
return [];
}
}
Future<void> insertTeam(Team team) async {
final database = await db;
if (database != null) {
await database.insert('Team', team.toMap());
}
}
Future<void> updateTeam(Team team) async {
final database = await db;
if (database != null) {
await database
.update('Team', team.toMap(), where: 'id = ?', whereArgs: [team.id]);
}
}
Future<void> deleteTeamById(int id) async {
final database = await db;
if (database != null) {
await database.delete('Team', where: 'id = ?', whereArgs: [id]);
}
}
Future<void> deleteAllTeams() async {
final database = await db;
if (database != null) {
await database.delete('Team', where: '1=1');
}
}
}

@ -1,64 +1,64 @@
import 'package:timemanagerapp/database/MyDatebase.dart';
import '../../entity/User.dart';
/**
*
*/
class UserDao {
//
static UserDao getInstance() {
return new UserDao();
}
//
//UserService userService=UserService.getInstance();
var db = MyDatabase.initDatabase();
Future<List<Map<String, dynamic>>> getUsers() async {
final database = await db;
if (database != null) {
return await database.rawQuery('SELECT * FROM users');
} else {
return [];
}
}
Future<void> insertUser(User user) async {
final database = await db;
if (database != null) {
await database.transaction((txn) async {
//
//!!!
await txn.rawInsert('''
INSERT INTO users(teamId,username,password,role)
VALUES("${user.username}","${user.password}",${user.role})
''');
});
}
}
Future<void> deleteUser(int id) async {
final database = await db;
if (database != null) {
await database.transaction((txn) async {
//
await txn.rawDelete('''
DELETE FROM users WHERE id=$id
''');
});
}
}
Future<void> deleteAllUsers() async {
final database = await db;
if (database != null) {
await database.transaction((txn) async {
//
await txn.rawDelete('''
DELETE FROM users
''');
});
}
}
}
import 'package:timemanagerapp/database/MyDatebase.dart';
import '../../entity/User.dart';
/**
*
*/
class UserDao {
//
static UserDao getInstance() {
return new UserDao();
}
//
//UserService userService=UserService.getInstance();
var db = MyDatabase.initDatabase();
Future<List<Map<String, dynamic>>> getUsers() async {
final database = await db;
if (database != null) {
return await database.rawQuery('SELECT * FROM users');
} else {
return [];
}
}
Future<void> insertUser(User user) async {
final database = await db;
if (database != null) {
await database.transaction((txn) async {
//
//!!!
await txn.rawInsert('''
INSERT INTO users(teamId,username,password,role)
VALUES(${user.teamId},"${user.username}","${user.password}",${user.role})
''');
});
}
}
Future<void> deleteUser(int id) async {
final database = await db;
if (database != null) {
await database.transaction((txn) async {
//
await txn.rawDelete('''
DELETE FROM users WHERE id=$id
''');
});
}
}
Future<void> deleteAllUsers() async {
final database = await db;
if (database != null) {
await database.transaction((txn) async {
//
await txn.rawDelete('''
DELETE FROM users
''');
});
}
}
}

@ -1,89 +1,76 @@
import 'package:timemanagerapp/database/MyDatebase.dart';
import 'package:timemanagerapp/entity/Work.dart';
/**
*
*/
class WorkDao {
//
static WorkDao getInstance() {
return new WorkDao();
}
var db = MyDatabase.initDatabase();
Future<List<Map<String, dynamic>>> getWorks() async {
final database = await db;
if (database != null) {
return database.query('works', orderBy: 'id ASC');
} else {
return [];
}
}
Future<List<Map<String, dynamic>>> getWorksByTeamid(int teamid) async {
final database = await db;
if (database != null) {
return database.query('works', where: 'teamId = ?', whereArgs: [teamid], orderBy: 'id ASC');
} else {
return [];
}
}
Future<int> insertWork(Work work) async {
final database = await db;
int res = 0;
if (database != null) {
res += await database.insert('works', work.toMap());
}
return res;
}
Future<int> updateWork(Work work) async {
final database = await db;
int res = 0;
if (database != null) {
res += await database
.update('works', work.toMap(), where: 'id = ?', whereArgs: [work.id]);
}
return res;
}
Future<int> deleteWorkByid(int id) async {
final database = await db;
int res = 0;
if (database != null) {
res += await database.delete('works', where: 'id = ?', whereArgs: [id]);
}
return res;
}
Future<int> deleteWorkByWorkid(int workid) async {
final database = await db;
int res = 0;
if (database != null) {
res += await database.delete('works', where: 'workId = ?', whereArgs: [workid]);
}
return res;
}
Future<int> deleteWorkByTeamid(int teamid) async {
final database = await db;
int res = 0;
if (database != null) {
res += await database.delete('works', where: 'teamId = ?', whereArgs: [teamid]);
}
return res;
}
Future<int> deleteAllWorks() async {
final database = await db;
int res = 0;
if (database != null) {
res += await database.delete('works', where: '1=1');
}
return res;
}
}
import 'package:timemanagerapp/database/MyDatebase.dart';
import 'package:timemanagerapp/entity/Work.dart';
/**
*
*/
class WorkDao {
//
static WorkDao getInstance() {
return new WorkDao();
}
var db = MyDatabase.initDatabase();
Future<List<Map<String, dynamic>>> getWorks() async {
final database = await db;
if (database != null) {
return database.query('Work', orderBy: 'id ASC');
} else {
return [];
}
}
Future<List<Map<String, dynamic>>> getWorksByTeamid(int teamid) async {
final database = await db;
if (database != null) {
return database.query('Work', where: 'teamid = ?', whereArgs: [teamid], orderBy: 'id ASC');
} else {
return [];
}
}
Future<void> insertWork(Work work) async {
final database = await db;
if (database != null) {
await database.insert('Work', work.toMap());
}
}
Future<void> updateWork(Work work) async {
final database = await db;
if (database != null) {
await database
.update('Work', work.toMap(), where: 'id = ?', whereArgs: [work.id]);
}
}
Future<void> deleteWorkByid(int id) async {
final database = await db;
if (database != null) {
await database.delete('Work', where: 'id = ?', whereArgs: [id]);
}
}
Future<void> deleteWorkByWorkid(int workid) async {
final database = await db;
if (database != null) {
await database.delete('Work', where: 'workid = ?', whereArgs: [workid]);
}
}
Future<void> deleteWorkByTeamid(int teamid) async {
final database = await db;
if (database != null) {
await database.delete('Work', where: 'teamid = ?', whereArgs: [teamid]);
}
}
Future<void> deleteAllWorks() async {
final database = await db;
if (database != null) {
await database.delete('Work', where: '1=1');
}
}
}

@ -1,75 +1,75 @@
class Clock {
int? id;
int userId;
String text;
String img;
String music;
DateTime continueTime;
Clock({
this.id,
required this.userId,
required this.text,
required this.img,
required this.music,
required this.continueTime,
});
Map<String, dynamic> toMap() {
return {
'userId': userId,
'text': "$text",
'img': "$img",
'music': "$music",
'continueTime': "${continueTime.toIso8601String()}",
};
}
// Getter methods
int? get getId => id;
int get getUserId => userId;
String get getText => text;
String get getImg => img;
String get getMusic => music;
DateTime get getContinueTime => continueTime;
// Setter methods
set setId(int newId) {
id = newId;
}
set setUserId(int newUserId) {
userId = newUserId;
}
set setText(String newText) {
text = newText;
}
set setImg(String newImg) {
img = newImg;
}
set setMusic(String newMusic) {
music = newMusic;
}
set setContinueTime(DateTime newContinueTime) {
continueTime = newContinueTime;
}
// toString method
@override
String toString() {
return 'Clock(id: $id, userId: $userId, text: $text, img: $img, music: $music, continueTime: $continueTime)';
}
}
class Clock {
int? id;
int userId;
String text;
String img;
String music;
DateTime continueTime;
Clock({
this.id,
required this.userId,
required this.text,
required this.img,
required this.music,
required this.continueTime,
});
Map<String, dynamic> toMap() {
return {
'userId': userId,
'text': "$text",
'img': "$img",
'music': "$music",
'continueTime': "${continueTime.toIso8601String()}",
};
}
// Getter methods
int? get getId => id;
int get getUserId => userId;
String get getText => text;
String get getImg => img;
String get getMusic => music;
DateTime get getContinueTime => continueTime;
// Setter methods
set setId(int newId) {
id = newId;
}
set setUserId(int newUserId) {
userId = newUserId;
}
set setText(String newText) {
text = newText;
}
set setImg(String newImg) {
img = newImg;
}
set setMusic(String newMusic) {
music = newMusic;
}
set setContinueTime(DateTime newContinueTime) {
continueTime = newContinueTime;
}
// toString method
@override
String toString() {
return 'Clock(id: $id, userId: $userId, text: $text, img: $img, music: $music, continueTime: $continueTime)';
}
}

@ -1,125 +1,127 @@
import 'package:timemanagerapp/setting/Setting.dart';
class Course {
int? id;
int? userId;
int courseId;
String name;
double credit;
String teacher;
String location;
String remark;
DateTime startTime;
DateTime endTime;
Course({
this.id,
required this.userId,
required this.courseId,
required this.name,
required this.credit,
required this.teacher,
required this.location,
required this.remark,
required this.startTime,
required this.endTime,
});
Map<String,dynamic> toMap(){
return {
'id': id,
'userId':userId,
'courseId':courseId,
'name':"$name",
'credit':credit,
'teacher':"$teacher",
'location':"$location",
'remark':"$remark",
'startTime':"${startTime.toIso8601String()}",
'endTime':"${endTime.toIso8601String()}"
};
}
factory Course.fromJson(Map<String, dynamic> course) {
return Course(
id: course['id'],
userId: course['userId'],
courseId: course['courseId'],
name: course['name'],
credit: 1.0*course['credit'],
teacher: course['teacher'],
location: course['location'],
remark: course['remark'],
startTime: DateTime.parse(course['startTime']),
endTime: DateTime.parse(course['endTime']),
);
}
// Getter methods
int? get getId => id;
int? get getUserId => userId;
int get getCourseId => courseId;
String get getName => name;
double get getCredit => credit;
String get getTeacher => teacher;
String get getLocation => location;
String get getRemark => remark;
DateTime get getStartTime => startTime;
DateTime get getEndTime => endTime;
// Setter methods
set setId(int newId) {
id = newId;
}
set setUserId(int newUserId) {
userId = newUserId;
}
set setCourseId(int newCourseId) {
courseId = newCourseId;
}
set setName(String newName) {
name = newName;
}
set setCredit(double newCredit) {
credit = newCredit;
}
set setTeacher(String newTeacher) {
teacher = newTeacher;
}
set setLocation(String newLocation) {
location = newLocation;
}
set setRemark(String newRemark) {
remark = newRemark;
}
set setstartTime(DateTime newstartTime) {
startTime = newstartTime;
}
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, startTime: $startTime, endTime: $endTime)';
}
}
import 'package:timemanagerapp/setting/Setting.dart';
class Course {
int? id;
int? userId;
int courseId;
String name;
double credit;
String teacher;
String location;
String remark;
DateTime start;
DateTime end;
Course({
this.id,
required this.userId,
required this.courseId,
required this.name,
required this.credit,
required this.teacher,
required this.location,
required this.remark,
required this.start,
required this.end,
});
Map<String,dynamic> toMap(){
return {
'userId':userId,
'courseId':courseId,
'name':"$name",
'credit':credit,
'teacher':"$teacher",
'location':"$location",
'remark':"$remark",
'start':"${start.toIso8601String()}",
'end':"${end.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
int? get getId => id;
int? get getUserId => userId;
int get getCourseId => courseId;
String get getName => name;
double get getCredit => credit;
String get getTeacher => teacher;
String get getLocation => location;
String get getRemark => remark;
DateTime get getStart => start;
DateTime get getEnd => end;
// Setter methods
set setId(int newId) {
id = newId;
}
set setUserId(int newUserId) {
userId = newUserId;
}
set setCourseId(int newCourseId) {
courseId = newCourseId;
}
set setName(String newName) {
name = newName;
}
set setCredit(double newCredit) {
credit = newCredit;
}
set setTeacher(String newTeacher) {
teacher = newTeacher;
}
set setLocation(String newLocation) {
location = newLocation;
}
set setRemark(String newRemark) {
remark = newRemark;
}
set setStart(DateTime newStart) {
start = newStart;
}
set setEnd(DateTime newEnd) {
end = newEnd;
}
// 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)';
}
}

@ -1,117 +1,117 @@
class CourseForm{
late String course;
late double credit ;
late String note;
late int startWeek;
late int endWeek;
late int startTime;
late int endTime;
late String teacher;
late String location;
late List<int> selectedDays = [];
// CourseForm({
// required this.course,
// required this.credit,
// required this.note,
// required this.day,
// required this.startWeek,
// required this.endWeek,
// required this.startTime,
// required this.endTime,
// required this.teacher,
// required this.location,
// required this.selectedDays,
// });
String setCourse(String course){
this.course = course;
return this.course;
}
double setCredit(double credit){
this.credit = credit;
return this.credit;
}
String setNote (String note){
this.note = note;
return this.note;
}
int setStartWeek (int startWeek){
this.startWeek = startWeek;
return this.startWeek;
}
int setEndWeek (int endWeek){
this.endWeek = endWeek;
return this.endWeek;
}
int setStartTime (int startTime){
this.startTime = startTime;
return this.startTime;
}
int setEndTime (int endTime){
this.endTime = endTime;
return this.endTime;
}
String setTeacher (String teacher){
this.teacher = teacher;
return this.teacher;
}
String setLocation (String location){
this.location = location;
return this.location;
}
List<int> setSelectedDays (List<int> selectedDays){
this.selectedDays = selectedDays;
return this.selectedDays;
}
String getCourse(){
return this.course;
}
double getCredit(){
return this.credit;
}
String getNote(){
return this.note;
}
int getStartWeek(){
return this.startWeek;
}
int getEndWeek(){
return this.endWeek;
}
int getStartTime(){
return this.startTime;
}
int getEndTime(){
return this.endTime;
}
String getTeacher(){
return this.teacher;
}
String getLocation(){
return this.location;
}
List<int> getSelectedDays(){
return this.selectedDays;
}
class CourseForm{
late String course;
late double credit ;
late String note;
late int startWeek;
late int endWeek;
late int startTime;
late int endTime;
late String teacher;
late String location;
late List<int> selectedDays = [];
// CourseForm({
// required this.course,
// required this.credit,
// required this.note,
// required this.day,
// required this.startWeek,
// required this.endWeek,
// required this.startTime,
// required this.endTime,
// required this.teacher,
// required this.location,
// required this.selectedDays,
// });
String setCourse(String course){
this.course = course;
return this.course;
}
double setCredit(double credit){
this.credit = credit;
return this.credit;
}
String setNote (String note){
this.note = note;
return this.note;
}
int setStartWeek (int startWeek){
this.startWeek = startWeek;
return this.startWeek;
}
int setEndWeek (int endWeek){
this.endWeek = endWeek;
return this.endWeek;
}
int setStartTime (int startTime){
this.startTime = startTime;
return this.startTime;
}
int setEndTime (int endTime){
this.endTime = endTime;
return this.endTime;
}
String setTeacher (String teacher){
this.teacher = teacher;
return this.teacher;
}
String setLocation (String location){
this.location = location;
return this.location;
}
List<int> setSelectedDays (List<int> selectedDays){
this.selectedDays = selectedDays;
return this.selectedDays;
}
String getCourse(){
return this.course;
}
double getCredit(){
return this.credit;
}
String getNote(){
return this.note;
}
int getStartWeek(){
return this.startWeek;
}
int getEndWeek(){
return this.endWeek;
}
int getStartTime(){
return this.startTime;
}
int getEndTime(){
return this.endTime;
}
String getTeacher(){
return this.teacher;
}
String getLocation(){
return this.location;
}
List<int> getSelectedDays(){
return this.selectedDays;
}
}

@ -1,83 +0,0 @@
class FreeTime {
int? id;
int? userId;
String? content;
String? name;
DateTime startTime;
DateTime endTime;
FreeTime({
this.id,
this.userId,
this.content,
this.name,
required this.startTime,
required this.endTime,
});
Map<String, dynamic> toMap() {
return {
'id': id,
'userId': userId,
'content': "$content",
'name': "$name",
'startTime': "${startTime.toIso8601String()}",
'endTime': "${endTime.toIso8601String()}"
};
}
factory FreeTime.fromJson(Map<String, dynamic> task) {
return FreeTime(
// id: task['id'],
// userId: task['userId'],
// content: task['content'],
// name: task['name'],
startTime: DateTime.parse(task['startTime']),
endTime: DateTime.parse(task['endTime']),
);
}
// Getter methods
int? get getId => id;
int? get getUserId => userId;
String? get getContent => content;
String? get getName => name;
DateTime get getStartTime => startTime;
DateTime get getEndTime => endTime;
// Setter methods
set setId(int newId) {
id = newId;
}
set setUserId(int newUserId) {
userId = newUserId;
}
set setContent(String newContent) {
content = newContent;
}
set setName(String newName) {
name = newName;
}
set setStartTime(DateTime newStartTime) {
startTime = newStartTime;
}
set setEndTime(DateTime newEndTime) {
endTime = newEndTime;
}
// toString method
@override
String toString() {
return 'FreeTime(id: $id, userId: $userId, content: $content, name: $name, startTime: $startTime, endTime: $endTime)';
}
}

@ -1,88 +1,82 @@
class ScheduleForm {
late String content;
late String name;
late int startWeek;
late int endWeek;
late DateTime startTime;
late DateTime endTime;
late List<int> selectedDays = [];
// ScheduleForm({
// this.id,
// required this.userId,
// required this.content,
// required this.scheduleFormId,
// required this.name,
// required this.startTime,
// required this.endTime,
// required this.type
// });
// Map<String, dynamic> toMap() {
// return {
// 'userId': userId,
// 'content': "$content",
// 'scheduleFormId': scheduleFormId,
// 'name': "$name",
// 'startTime': "${startTime.toIso8601String()}",
// 'endTime': "${endTime.toIso8601String()}"
// };
// }
Map<String, dynamic> toMap() {
return {
'content': "$content",
'name': "$name",
'startWeek': startWeek,
'endWeek': endWeek,
'startTime': startTime,
'endTime': endTime,
'selectedDays': selectedDays
};
}
// Getter methods
int get getStartWeek => startWeek;
int get getEndWeek => endWeek;
DateTime get getStartTime => startTime;
DateTime get getEndTime => endTime;
String get getName => name;
String get getContent => content;
List<int> get getSelectedDays => selectedDays;
// Setter methods
set setStartWeek(int newStartWeek) {
startWeek = newStartWeek;
}
set setEndWeek(int newEndWeek) {
endWeek = newEndWeek;
}
set setStartTime(DateTime newStartTime) {
startTime = newStartTime;
}
set setEndTime(DateTime newEndTime) {
endTime = newEndTime;
}
set setName(String newName) {
name = newName;
}
set setContent(String newContent) {
content = newContent;
}
set setSelectedDays(List<int> newSelectedDays) {
selectedDays = newSelectedDays;
}
// toString method
@override
String toString() {
return 'ScheduleForm(content: $content, name: $name, startWeek: $startWeek, endWeek: $endWeek, startTime: $startTime, endTime: $endTime, selectedDays: $selectedDays)';
}
}
class ScheduleForm {
int? id;
int userId;
String content;
int ScheduleFormId;
String name;
DateTime startTime;
DateTime endTime;
String type;
ScheduleForm({
this.id,
required this.userId,
required this.content,
required this.ScheduleFormId,
required this.name,
required this.startTime,
required this.endTime,
required this.type
});
Map<String, dynamic> toMap() {
return {
'userId': userId,
'content': "$content",
'ScheduleFormId': ScheduleFormId,
'name': "$name",
'startTime': "${startTime.toIso8601String()}",
'endTime': "${endTime.toIso8601String()}"
};
}
// Getter methods
int? get getId => id;
int get getUserId => userId;
String get getContent => content;
int get getScheduleFormId => ScheduleFormId;
String get getName => name;
DateTime get getStartTime => startTime;
DateTime get getEndTime => endTime;
// Setter methods
set setId(int newId) {
id = newId;
}
set setUserId(int newUserId) {
userId = newUserId;
}
set setContent(String newContent) {
content = newContent;
}
set setScheduleFormId(int newScheduleFormId) {
ScheduleFormId = newScheduleFormId;
}
set setName(String newName) {
name = newName;
}
set setStartTime(DateTime newStartTime) {
startTime = newStartTime;
}
set setEndTime(DateTime newEndTime) {
endTime = newEndTime;
}
// toString method
@override
String toString() {
return 'ScheduleForm(id: $id, userId: $userId, content: $content, ScheduleFormId: $ScheduleFormId, name: $name, startTime: $startTime, endTime: $endTime)';
}
}

@ -1,93 +1,80 @@
class Task {
int? id;
int userId;
String content;
int taskId;
String name;
DateTime startTime;
DateTime endTime;
Task({
this.id,
required this.userId,
required this.content,
required this.taskId,
required this.name,
required this.startTime,
required this.endTime,
});
Map<String, dynamic> toMap() {
return {
'id': id,
'userId': userId,
'content': "$content",
'taskId': taskId,
'name': "$name",
'startTime': "${startTime.toIso8601String()}",
'endTime': "${endTime.toIso8601String()}"
};
}
factory Task.fromJson(Map<String, dynamic> task) {
return Task(
id: task['id'],
userId: task['userId'],
content: task['content'],
taskId: task['taskId'],
name: task['name'],
startTime: DateTime.parse(task['startTime']),
endTime: DateTime.parse(task['endTime']),
);
}
// Getter methods
int? get getId => id;
int get getUserId => userId;
String get getContent => content;
int get getTaskId => taskId;
String get getName => name;
DateTime get getStartTime => startTime;
DateTime get getEndTime => endTime;
// Setter methods
set setId(int newId) {
id = newId;
}
set setUserId(int newUserId) {
userId = newUserId;
}
set setContent(String newContent) {
content = newContent;
}
set setTaskId(int newTaskId) {
taskId = newTaskId;
}
set setName(String newName) {
name = newName;
}
set setStartTime(DateTime newStartTime) {
startTime = newStartTime;
}
set setEndTime(DateTime newEndTime) {
endTime = newEndTime;
}
// toString method
@override
String toString() {
return 'Task(id: $id, userId: $userId, content: $content, taskId: $taskId, name: $name, startTime: $startTime, endTime: $endTime)';
}
}
class Task {
int? id;
int userId;
String content;
int taskId;
String name;
DateTime startTime;
DateTime endTime;
Task({
this.id,
required this.userId,
required this.content,
required this.taskId,
required this.name,
required this.startTime,
required this.endTime,
});
Map<String, dynamic> toMap() {
return {
'userId': userId,
'content': "$content",
'taskId': taskId,
'name': "$name",
'startTime': "${startTime.toIso8601String()}",
'endTime': "${endTime.toIso8601String()}"
};
}
// Getter methods
int? get getId => id;
int get getUserId => userId;
String get getContent => content;
int get getTaskId => taskId;
String get getName => name;
DateTime get getStartTime => startTime;
DateTime get getEndTime => endTime;
// Setter methods
set setId(int newId) {
id = newId;
}
set setUserId(int newUserId) {
userId = newUserId;
}
set setContent(String newContent) {
content = newContent;
}
set setTaskId(int newTaskId) {
taskId = newTaskId;
}
set setName(String newName) {
name = newName;
}
set setStartTime(DateTime newStartTime) {
startTime = newStartTime;
}
set setEndTime(DateTime newEndTime) {
endTime = newEndTime;
}
// toString method
@override
String toString() {
return 'Task(id: $id, userId: $userId, content: $content, taskId: $taskId, name: $name, startTime: $startTime, endTime: $endTime)';
}
}

@ -1,73 +1,53 @@
class Team {
int? id;
int leaderId;
String teamName;
int maxNumber;
String? introduce;
Team({
this.id,
required this.leaderId,
required this.teamName,
required this.maxNumber,
this.introduce
});
Map<String, dynamic> toMap() {
return {
'id': id,
'leaderId': leaderId,
'teamName': "$teamName",
'maxNumber': maxNumber,
'introduce': "$introduce"
};
}
factory Team.fromJson(Map<String, dynamic> json) {
return Team(
id: json['id'],
leaderId: json['leaderId'],
teamName: json['teamName'],
maxNumber: json['maxNumber'],
introduce: json['introduce'],
);
}
// Getter methods
int? get getId => id;
int get getLeaderId => leaderId;
String get getTeamName => teamName;
int get getMaxNumber => maxNumber;
String? get getIntroduce => introduce;
// Setter methods
set setId(int newId) {
id = newId;
}
set setLeaderId(int newLeaderId) {
leaderId = newLeaderId;
}
set setTeamName(String newTeamName) {
teamName = newTeamName;
}
set setMaxNumber(int newMaxNumber) {
maxNumber = newMaxNumber;
}
set setIntroduce(String newIntroduce) {
introduce = newIntroduce;
}
// toString method
@override
String toString() {
return 'Team{id: $id, leaderId: $leaderId, teamName: $teamName, maxNumber: $maxNumber, introduce: $introduce}';
}
}
class Team {
int? id;
int leaderId;
String teamName;
int maxNumber;
Team({
this.id,
required this.leaderId,
required this.teamName,
required this.maxNumber,
});
Map<String, dynamic> toMap() {
return {
'leaderId': leaderId,
'teamName': "$teamName",
'maxNumber': maxNumber,
};
}
// Getter methods
int? get getId => id;
int get getLeaderId => leaderId;
String get getTeamName => teamName;
int get getMaxNumber => maxNumber;
// Setter methods
set setId(int newId) {
id = newId;
}
set setLeaderId(int newLeaderId) {
leaderId = newLeaderId;
}
set setTeamName(String newTeamName) {
teamName = newTeamName;
}
set setMaxNumber(int newMaxNumber) {
maxNumber = newMaxNumber;
}
// toString method
@override
String toString() {
return 'Team(id: $id, leaderId:$leaderId, teamName:$teamName, maxNumber: $maxNumber)';
}
}

@ -1,80 +1,81 @@
class User {
int? id;
String username;
String password;
int role; //01
User({
this.id,
required this.username,
required this.password,
required this.role,
});
Map<String, dynamic> toMap() {
return {
'id': id,
'username': "$username",
'password': "$password",
'role': role,
};
}
factory User.fromJson(Map<String, dynamic> user) {
return User(
id: user['id'],
username: user['username'],
password: user['password'],
role: user['role'],
);
}
// Getter methods
int? get getId => id;
String get getUsername => username;
String get getPassword => password;
int get getRole => role;
// Setter methods
set setId(int newId) {
id = newId;
}
set setUsername(String newUsername) {
username = newUsername;
}
set setPassword(String newPassword) {
password = newPassword;
}
set setRole(int newRole) {
role = newRole;
}
// User
static User parseString(String userString) {
final regex = RegExp(r'User\(id: (-?\d+), username: (.*), password: (.*), role: (-?\d+)\)');
final match = regex.firstMatch(userString);
if (match != null && match.groupCount == 4) {
return User(
id: int.parse(match.group(1)!),
username: match.group(2)!,
password: match.group(3)!,
role: int.parse(match.group(4)!),
);
} else {
throw FormatException("Invalid userString format");
}
}
// toString method
@override
String toString() {
return 'User(id: $id, username: $username, password: $password, role: $role)';
}
}
class User {
int? id;
int teamId;
String username;
String password;
int role; //01
User({
this.id,
required this.teamId,
required this.username,
required this.password,
required this.role,
});
Map<String, dynamic> toMap() {
return {
'teamId': teamId,
'username': "$username",
'password': "$password",
'role': role,
};
}
// Getter methods
int? get getId => id;
int get getTeamId => teamId;
String get getUsername => username;
String get getPassword => password;
int get getRole => role;
// Setter methods
set setId(int newId) {
id = newId;
}
set setTeamId(int newTeamId) {
teamId = newTeamId;
}
set setUsername(String newUsername) {
username = newUsername;
}
set setPassword(String newPassword) {
password = newPassword;
}
set setRole(int newRole) {
role = newRole;
}
// User
factory User.parseString(String userString) {
final parts = userString.split(', '); // toString()
final id = int.parse(parts[0].substring(8)); // id
final teamId = int.parse(parts[1].substring(7)); // teamId
final username = parts[2].substring(10); //
final password = parts[3].substring(10); //
final role = int.parse(parts[4].substring(6)); // role
return User(
id: id,
teamId: teamId,
username: username,
password: password,
role: role,
);
}
// toString method
@override
String toString() {
return 'User(id: $id, teamId:$teamId, username: $username, password: $password, role: $role)';
}
}

@ -1,121 +1,98 @@
class Work {
late int? id;
late int userId;
late String status;
late String content;
late String name;
late int teamId;
late int workId;
late DateTime endTime;
late DateTime startTime;
late String? teamName;
Work({
this.id,
required this.userId,
required this.status,
required this.content,
required this.teamId,
this.teamName,
required this.name,
required this.workId,
required this.endTime,
required this.startTime,
});
Map<String, dynamic> toMap() {
return {
'id': id,
'userId': userId,
'status': "$status",
'content': "$content",
'teamId': teamId,
'name': "$name",
'workId': workId,
'endTime': "${endTime.toIso8601String()}",
'startTime': "${startTime.toIso8601String()}"
};
}
factory Work.fromJson(Map<String, dynamic> work) {
return Work(
id: work['id'],
userId: work['userId'],
status: work['status'],
content: work['content'],
teamId: work['teamId'],
name: work['name'],
workId: work['workId'],
endTime: DateTime.parse(work['endTime']),
startTime: DateTime.parse(work['startTime']),
);
}
// Getter methods
int? get getId => id;
int get getUserId => userId;
String get getStatus => status;
String get getContent => content;
String get getName => name;
String? get getTeamName => teamName;
int get getTeamId => teamId;
int get getWorkId => workId;
DateTime get getEndTime => endTime;
DateTime get getStartTime => startTime;
// Setter methods
set setId(int newId) {
id = newId;
}
set setUserId(int newUserId) {
userId = newUserId;
}
set setStatus(String newStatus) {
status = newStatus;
}
set setContent(String newcontent) {
content = newcontent;
}
set setTeamId(int newTeamId) {
teamId = newTeamId;
}
set setTeamName(String newTeamName) {
teamName = newTeamName;
}
set setName(String newName) {
name = newName;
}
set setWorkId(int newWorkId) {
workId = newWorkId;
}
set setEndTime(DateTime newEndTime) {
endTime = newEndTime;
}
set setStartTime(DateTime newStartTime) {
startTime = newStartTime;
}
// toString method
@override
String toString() {
return 'Work(id: $id, userId:$userId, name:$name, status: $status, content: $content, teamId: $teamId, workId: $workId, endTime: $endTime, startTime: $startTime)';
}
}
class Work {
int? id;
int userId;
String status;
String workContent;
int teamId;
int functionaryId;
int workId;
DateTime endTime;
DateTime startTime;
Work({
this.id,
required this.userId,
required this.status,
required this.workContent,
required this.teamId,
required this.functionaryId,
required this.workId,
required this.endTime,
required this.startTime,
});
Map<String, dynamic> toMap() {
return {
'userId': userId,
'status': "$status",
'workContent': "$workContent",
'teamId': teamId,
'functionaryId': functionaryId,
'workId': workId,
'endTime': "${endTime.toIso8601String()}",
'startTime': "${startTime.toIso8601String()}"
};
}
// Getter methods
int? get getId => id;
int get getUserId => userId;
String get getStatus => status;
String get getWorkContent => workContent;
int get getTeamId => teamId;
int get getFunctionaryId => functionaryId;
int get getWorkId => workId;
DateTime get getEndTime => endTime;
DateTime get getStartTime => startTime;
// Setter methods
set setId(int newId) {
id = newId;
}
set setUserId(int newUserId) {
userId = newUserId;
}
set setStatus(String newStatus) {
status = newStatus;
}
set setWorkContent(String newWorkContent) {
workContent = newWorkContent;
}
set setTeamId(int newTeamId) {
teamId = newTeamId;
}
set setFunctionaryId(int newFunctionaryId) {
functionaryId = newFunctionaryId;
}
set setWorkId(int newWorkId) {
workId = newWorkId;
}
set setEndTime(DateTime newEndTime) {
endTime = newEndTime;
}
set setStartTime(DateTime newStartTime) {
startTime = newStartTime;
}
// 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)';
}
}

@ -1,49 +1,31 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:timemanagerapp/provider/TeamProvider.dart';
import 'package:timemanagerapp/provider/TeamUserProvider.dart';
import 'package:timemanagerapp/setting/Setting.dart';
import 'package:timemanagerapp/util/MyLogger.dart';
import 'package:timemanagerapp/widgets/HomeWidget.dart';
import 'package:timemanagerapp/provider/TimeProvider.dart';
init() async {
WidgetsFlutterBinding.ensureInitialized();
await Setting.init();
}
Future<void> main() async {
await init();
runApp(MyApp());
// Logger();
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
Setting.deviceWidth = MediaQuery.of(context).size.width;
// print("deviceWidth获取1: ${Setting.deviceWidth}");
return MultiProvider( //Timetable
providers: [
ChangeNotifierProvider(create: (ctx) => TimeProvider()),
ChangeNotifierProvider(create: (ctx) => TeamProvider()),
ChangeNotifierProvider(create: (ctx) => TeamUserProvider()),
],
child: MaterialApp(
home: Scaffold(
body: LayoutBuilder(
builder: (context, constraints) {
Setting.deviceWidth = constraints.maxWidth;
// print("deviceWidth获取2: ${Setting.deviceWidth}");
// 使
return HomeWidget();
},
),
),
),
); // MaterialApp
}
}
import 'package:flutter/material.dart';
import 'package:timemanagerapp/setting/Setting.dart';
import 'package:timemanagerapp/widgets/HomeWidget.dart';
init() async {
WidgetsFlutterBinding.ensureInitialized();
await Setting.init();
}
void main() async {
await init();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
Setting.deviceWidth = MediaQuery.of(context).size.width;
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
// appBar: AppBar(
// title: Text('测试'),
// ),
body: HomeWidget(),
),
);
}
}

@ -1,20 +0,0 @@
import 'package:flutter/cupertino.dart';
class TeamProvider extends ChangeNotifier {
int _updatTeamCount = 0;
int get updatTeamCount => _updatTeamCount;
set updatTeamCount(int value) {
print("provider手动更新Team表");
_updatTeamCount = value;
notifyListeners();
}
void updatTeame() {
print("provider手动更新Team表");
_updatTeamCount = ~_updatTeamCount;
notifyListeners();
}
}

@ -1,20 +0,0 @@
import 'package:flutter/cupertino.dart';
class TeamUserProvider extends ChangeNotifier {
int _updatTeamUserCount = 0;
int get updatTeameCount => _updatTeamUserCount;
set updatTeameUserCount(int value) {
print("provider手动更新TeamUser表");
_updatTeamUserCount = value;
notifyListeners();
}
void updatTeameUser() {
print("provider手动更新TeamUser表");
_updatTeamUserCount = ~_updatTeamUserCount;
notifyListeners();
}
}

@ -1,20 +0,0 @@
import 'package:flutter/cupertino.dart';
class TimeProvider extends ChangeNotifier {
int _updatTimtTablecount = 0;
int get updatTimtTablecount => _updatTimtTablecount;
set updatTimtTablecount(int value) {
print("provider手动更新课表");
_updatTimtTablecount = value;
notifyListeners();
}
void updateTimetable() {
print("provider手动更新课表");
_updatTimtTablecount = ~_updatTimtTablecount;
notifyListeners();
}
}

@ -1,22 +1,24 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:timemanagerapp/widgets/AddCourseFormWidget.dart';
import '../entity/Course.dart';
class AddCourseRoute extends StatelessWidget {
final Course? exitCourse;
AddCourseRoute({this.exitCourse});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('编辑自定义课程'),
),
body: AddCourseFormWidget(exitCourse: exitCourse),
);
}
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:timemanagerapp/widgets/AddCourseFormWidget.dart';
class AddCourseRoute extends StatelessWidget {
final VoidCallback onCourseAdded;
AddCourseRoute({required this.onCourseAdded});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('添加自定义课程'),
),
body: AddCourseFormWidget(),
);
}
@override
dispose() {//
onCourseAdded();
}
}

@ -1,21 +1,15 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:timemanagerapp/widgets/AddScheduleFormWidget.dart';
class AddScheduleRoute extends StatelessWidget {
AddScheduleRoute({Key? key, required this.scheduleType, this.teamId, this.exitSchedule}) : super(key: key);
final String scheduleType; //taskwork
final int? teamId;
final exitSchedule;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: scheduleType == 'task' ? Text('编辑个人计划') : Text('编辑团队任务'),
),
body: AddScheduleFormWidget(scheduleType: scheduleType, teamId: teamId, exitSchedule: exitSchedule),
);
}
}
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:timemanagerapp/widgets/AddScheduleFormWidget.dart';
class AddScheduleRoute extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('添加自定义个人计划'),
),
body: AddScheduleFormWidget(),
);
}
}

@ -1,17 +0,0 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import '../widgets/AddTeamWidget.dart';
class AddTeamRoute extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('编辑团队信息'),
),
body: AddTeamWidget(),
);
}
}

@ -1,17 +0,0 @@
// import 'package:flutter/cupertino.dart';
// import 'package:flutter/material.dart';
//
// import '../widgets/ManageUserTeamWidget.dart';
//
// class ManageUserTeamRoute extends StatelessWidget {
//
// @override
// Widget build(BuildContext context) {
// return Scaffold(
// appBar: AppBar(
// title: Text('团队成员管理'),
// ),
// // body: ManageUserTeamWidget(),
// );
// }
// }

@ -1,96 +0,0 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:timemanagerapp/controller/TeamController.dart';
import '../setting/Setting.dart';
import '../widgets/AddTeamWidget.dart';
import '../widgets/JoinTeamWidget.dart';
import '../widgets/TeamWidget.dart';
class TeamRoute extends StatelessWidget {
//TeamWidgetKey
TeamController teamController = TeamController();
@override
initState() {
Setting.init();
}
@override
Widget build(BuildContext context) {
if(Setting.teamWidgetKey == null) {
Setting.teamWidgetKey =
GlobalKey(); // TeamWidgetKey,initStateStatefulWidget
}
if(Setting.user!.getId == -1){
return Scaffold(
appBar: AppBar(
title: Text('我的团队'),
),
body: Center(
child: Text('请先登录'),
),
);
}
else {
return Scaffold(
appBar: AppBar(
title: Text('我的团队'),
),
body: TeamWidget(key: Setting.teamWidgetKey!),
floatingActionButton: FloatingActionButton(
//
onPressed: () async {
//
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text('选择操作'),
content: Column(
mainAxisSize: MainAxisSize.min,
children: [
ElevatedButton(
onPressed: () async {
//
Navigator.of(context).pop(); //
await Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
return JoinTeamWidget();
},
),
);
},
child: Text('加入团队'),
),
ElevatedButton(
onPressed: () async {
//
Navigator.of(context).pop();
await Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
return AddTeamWidget();
},
),
);
Setting.teamWidgetKey!.currentState!.futureDo();
},
child: Text('创建团队'),
),
SizedBox(height: 10),
],
),
);
},
);
},
child: Icon(Icons.add),
),
);
}
}
}

@ -1,16 +1,16 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import '../widgets/TestWidget.dart';
class TestRoute extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('开发者测试'),
),
body: TestWidget(),
);
}
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import '../widgets/TestWidget.dart';
class TestRoute extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('开发者测试'),
),
body: TestWidget(),
);
}
}

@ -0,0 +1,17 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:timemanagerapp/widgets/AddCourseFormWidget.dart';
import 'package:timemanagerapp/widgets/TimetableWidget.dart';
class TimetableRoute extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('时间表'),
),
body: TimetableWidget(),
);
}
}

@ -1,18 +0,0 @@
import 'package:flutter/material.dart';
import 'package:timemanagerapp/widgets/TomatoClockWidget.dart';
class TomatoClockRoute extends StatelessWidget {
final int flag;
final double selectedDuration;
const TomatoClockRoute({super.key, required this.flag,required this.selectedDuration});
@override
Widget build(BuildContext context) {
return Scaffold(
body: TomatoClockWidget(flag:flag,selectedDuration:selectedDuration)
);
}
}

@ -1,17 +1,17 @@
// import 'package:flutter/cupertino.dart';
// import 'package:flutter/material.dart';
// import 'package:timemanagerapp/widgets/UserSettingWidget.dart';
//
// import '../tests/TestWidget.dart';
//
// class UserSettingRoute extends StatelessWidget {
// @override
// Widget build(BuildContext context) {
// return Scaffold(
// appBar: AppBar(
// title: Text('设置'),
// ),
// body: UserSettingWidget(),
// );
// }
// }
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:timemanagerapp/widgets/UserSettingWidget.dart';
import '../tests/TestWidget.dart';
class UserSettingRoute extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('设置'),
),
body: UserSettingWidgt(),
);
}
}

@ -1,140 +1,57 @@
import 'dart:core';
import 'package:flutter/cupertino.dart';
import 'package:shared_preferences/shared_preferences.dart';
import '../entity/User.dart';
import '../widgets/FreeTimetableWidget.dart';
import '../widgets/TeamWidget.dart';
import '../widgets/TimetableWidget.dart';
class Setting {
static SharedPreferences? prefs;
static bool initFlag = true;
static DateTime startdate_init = DateTime(2023, 8, 28);
static late DateTime startdate;
static int termAllWeekCout = 20; //
static DateTime timeTableStartTime = DateTime(2023, 8, 28, 7, 00); //
static DateTime timeTableEndTime = DateTime(2023, 8, 28, 23, 00); //
static late User? user = User(id:-1, username: "null", password: "null", role: 0);
static User nullUser = User(id:-1, username: "null", password: "null", role: 0);
static double pixelToMinuteRatio_ratio = 300; //
static late double deviceWidth = 400; //
static bool isMusicPlaying = false; //
static bool isDeveloperButtonVisible = false; //
static GlobalKey<TimetableWidgetState>? timetableWidgetKey;
static GlobalKey<TeamWidgetState>? teamWidgetKey;
static GlobalKey<FreeTimetableWidgetState>? freeTimetableWidgeKey;
static late User testUer;
static init() async {
//
print("Setting初始化");
// prefs!.setString("startdate", startdate.toString());
prefs = await SharedPreferences.getInstance();
getStartDate();
getUser();
getIsDeveloperButtonVisible();
getpixelToMinuteRatio_ratio();
getInitFlag();
print("Setting初始化成功");
}
static DateTime getStartDate() {
//
String res = null.toString();
if(prefs!.containsKey("startdate")) res = prefs!.getString("startdate")!;
if (res == null.toString()) {
saveStartDate(startdate_init);
return startdate_init;
} else {
startdate = DateTime.parse(res);
return startdate;
}
}
static saveStartDate(DateTime startdate) async {
//
Setting.startdate = startdate;
await prefs?.setString("startdate", startdate.toString());
}
static User? getUser() {
//
String res = null.toString();
if(prefs!.containsKey("user")) res = prefs!.getString("user")!;
if (res == null.toString()) {
user = nullUser;
return nullUser;
} else {
user = User.parseString(res);
return user;
}
}
static saveUser(User newuser) async {
//
user = newuser;
await prefs?.setString("user", newuser.toString());
}
//pixelToMinuteRatio_ratio
static double getpixelToMinuteRatio_ratio() {
//
double? res;
if(prefs!.containsKey("pixelToMinuteRatio_ratio")) res = prefs!.getDouble("pixelToMinuteRatio_ratio")!;
if (res == null) {
pixelToMinuteRatio_ratio = 1;
return 1;
} else {
pixelToMinuteRatio_ratio = res!;
return pixelToMinuteRatio_ratio;
}
}
static savepixelToMinuteRatio_ratio(double value) async {
//
pixelToMinuteRatio_ratio = value;
await prefs?.setDouble("pixelToMinuteRatio_ratio", value);
}
static bool getIsDeveloperButtonVisible() {
//
bool? res;
if(prefs!.containsKey("isDeveloperButtonVisible")) res = prefs!.getBool("isDeveloperButtonVisible")!;
if (res == null) {
isDeveloperButtonVisible = false;
return false;
} else {
isDeveloperButtonVisible = res!;
return isDeveloperButtonVisible;
}
}
static saveIsDeveloperButtonVisible(bool value) async {
//
isDeveloperButtonVisible = value;
await prefs?.setBool("isDeveloperButtonVisible", value);
}
static getInitFlag() {
bool? getInitFlag = prefs!.getBool("initFlag");
if (getInitFlag == null) {
initFlag = true;
return true;
} else {
initFlag = getInitFlag;
return initFlag;
}
}
static saveInitFlag(bool value) async {
initFlag = value;
await prefs?.setBool("initFlag", value);
}
}
import 'dart:ffi';
import 'package:shared_preferences/shared_preferences.dart';
import '../entity/User.dart';
class Setting {
static SharedPreferences? prefs;
static DateTime startdate_init = DateTime(2023, 8, 28);
static late DateTime startdate;
static late User? user;
static double pixelToMinuteRatio_ratio = 1;
static late double deviceWidth ;
static init() async {
//
print("Setting初始化");
prefs = await SharedPreferences.getInstance();
saveStartDate(startdate_init); //
startdate = getStartDate();
user = getUser();
print("Setting初始化成功");
}
static DateTime getStartDate() {
//
String res = null.toString();
if(prefs!.containsKey("startdate")) res = prefs!.getString("startdate")!;
if (res == null.toString()) {
saveStartDate(startdate_init);
return startdate_init;
} else {
return DateTime.parse(res);
}
}
static saveStartDate(DateTime startdate) {
//
prefs?.setString("startdate", startdate.toString());
}
static User? getUser() {
//
String res = null.toString();
if(prefs!.containsKey("user")) res = prefs!.getString("user")!;
if (res == null.toString()) {
return User(id:0, teamId: 0, username: "", password: "", role: 0);
} else {
return User.parseString(res);
}
}
static saveUser(User user) {
//
prefs?.setString("user", user.toString());
}
}

@ -1,36 +1,36 @@
import 'dart:developer';
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:timemanagerapp/setting/Setting.dart';
import 'package:timemanagerapp/util/GetCourseByLogin.dart';
import 'package:timemanagerapp/widgets/AddCourseFormWidget.dart';
import 'package:timemanagerapp/widgets/LoginWidget.dart';
import 'package:timemanagerapp/widgets/TimetableWidget.dart';
init() async {
WidgetsFlutterBinding.ensureInitialized();
await Setting.init();
}
void main() async {
await init();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('添加课程'),
),
body: AddCourseFormWidget(),
),
);
}
}
import 'dart:developer';
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:timemanagerapp/setting/Setting.dart';
import 'package:timemanagerapp/util/GetCourseByLogin.dart';
import 'package:timemanagerapp/widgets/AddCourseFormWidget.dart';
import 'package:timemanagerapp/widgets/LoginWidget.dart';
import 'package:timemanagerapp/widgets/TimetableWidget.dart';
init() async {
WidgetsFlutterBinding.ensureInitialized();
await Setting.init();
}
void main() async {
await init();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('添加课程'),
),
body: AddCourseFormWidget(),
),
);
}
}

@ -1,11 +1,11 @@
import '../setting/Setting.dart';
import 'dart:ui' as ui;
void init(){
Setting.init();
}
void main() {
init();
print(Setting.getStartDate());
}
import '../setting/Setting.dart';
import 'dart:ui' as ui;
void init(){
Setting.init();
}
void main() {
init();
print(Setting.getStartDate());
}

@ -1,247 +1,247 @@
// /*
// import 'package:flutter/material.dart';
// import 'package:timemanagerapp/Wighets/AddCourseFormWidget.dart';
//
// void main() {
// runApp(MyApp());
// }
//
// class MyApp extends StatelessWidget {
// @override
// Widget build(BuildContext context) {
// return MaterialApp(
// home: Scaffold(
// appBar: AppBar(
// title: Text('添加课程'),
// ),
// body: AddCourseFormWidget(),
// ),
// );
// }
// }
// */
// import 'package:flutter/material.dart';
// import 'package:sqflite/sqflite.dart';
// import 'package:timemanagerapp/controller/CourseController.dart';
// import 'package:timemanagerapp/controller/UserController.dart';
// import 'package:timemanagerapp/entity/Course.dart';
// import 'package:timemanagerapp/entity/User.dart';
// import 'package:timemanagerapp/database/MyDatebase.dart';
// import 'package:timemanagerapp/Wighets/TimetableWidget.dart';
//
// import '../main.dart';
// import '../ruters/AddCourseRoute.dart';
// import '../ruters/TimetableRoute.dart';
// import '../tests/database_test.dart';
// import 'package:timemanagerapp/Wighets/AddCourseFormWidget.dart';
//
// class TestWidget extends StatefulWidget {
// const TestWidget({Key? key}) : super(key: key);
//
// @override
// _HomePageState createState() => _HomePageState();
// }
//
// class _HomePageState extends State<TestWidget> {
// late UserController userController;
// late CourseController courseController;
//
// @override
// void initState() {
// super.initState();
// MyDatabase.initDatabase();
// userController = UserController.getInstance();
// courseController = CourseController.getInstance();
// }
//
// @override
// Widget build(BuildContext context) {
// return Center(
// child: Column(
// mainAxisAlignment: MainAxisAlignment.center,
// children: [
// ElevatedButton(
// onPressed: userController.deleteAllUsers,
// child: Text('删除所有用户'),
// ),
// ElevatedButton(
// onPressed: () => userController.insertUser(User(
// teamId: 3231, username: "测试用户", password: "23243", role: 1)),
// child: Text('插入一个测试用户'),
// ),
// ElevatedButton(
// onPressed: () {
// userController.getUsers().then((users) {
// showDialog(
// context: context,
// builder: (context) {
// return AlertDialog(
// title: Text('用户列表'),
// content: SingleChildScrollView(
// child: Column(
// mainAxisSize: MainAxisSize.min,
// children: users
// .map((user) => ListTile(
// title: Text(user['username']),
// subtitle: Text(user.toString()),
// ))
// .toList(),
// ),
// ),
// );
// },
// );
// });
// },
// child: Text('显示用户列表'),
// ),
// ElevatedButton(
// onPressed: courseController.deleteAllCourses,
// child: Text('删除所有课程'),
// ),
// // ElevatedButton(
// // onPressed: () => courseController.autoImportCours(jsonstr),
// // child: Text('导入课程(待开发)'),
// // ),
// ElevatedButton(
// onPressed: () => courseController.insertCourse(Course(
// userId: 1,
// courseId: 2,
// name: "测试课",
// credit: 3,
// teacher: "嘉豪",
// location: "638",
// remark: "happy",
// start: DateTime.now(),
// end: DateTime.now().add(Duration(hours: 2)))),
// child: Text('插入一个测试课程'),
// ),
// ElevatedButton(
// onPressed: () {
// // AddCourseFormWidget
// Navigator.push(
// context,
// MaterialPageRoute(
// builder: (context) {
// return AddCourseRoute();
// },
// ),
// );
// },
// child: Text('添加自定义课程'),
// ),
// ElevatedButton(
// onPressed: () {
// courseController.getCourses().then((courses) {
// showDialog(
// context: context,
// builder: (context) {
// return AlertDialog(
// title: Text('课程列表'),
// content: SingleChildScrollView(
// child: Column(
// mainAxisSize: MainAxisSize.min,
// children: courses
// .map((course) => ListTile(
// title: Text(course.getName),
// subtitle: Text(course.toString()),
// ))
// .toList(),
// ),
// ),
// );
// },
// );
// });
// },
// child: Text('显示课程列表'),
// ),
// ElevatedButton(
// onPressed: () {
// // AddCourseFormWidget
// Navigator.push(
// context,
// MaterialPageRoute(
// builder: (context) {
// return TimetableRoute();
// },
// ),
// );
// },
// child: Text('查看时间表'),
// ),
// AddCourseButton(
// onCourseAdded: (jsonstr) {
// // addCourse()
// // courseController.autoImportCours(jsonstr);
// }
// )
// ],
// ),
// );
// }
// }
//
// //string
//
// class AddCourseButton extends StatefulWidget {
// final Function(String jsonstr) onCourseAdded;
//
// AddCourseButton({required this.onCourseAdded});
//
// @override
// _AddCourseButtonState createState() => _AddCourseButtonState();
// }
//
// class _AddCourseButtonState extends State<AddCourseButton> {
// TextEditingController _jsonstrController = TextEditingController();
//
// void _showAddCourseDialog(BuildContext context) {
// showDialog(
// context: context,
// builder: (BuildContext context) {
// return AlertDialog(
// title: Text('json导入课程'),
// content: TextField(
// controller: _jsonstrController,
// decoration: InputDecoration(labelText: '请输入json字符串'),
// ),
// actions: <Widget>[
// TextButton(
// child: Text('取消'),
// onPressed: () {
// Navigator.of(context).pop();
// },
// ),
// TextButton(
// child: Text('确定'),
// onPressed: () {
// final jsonstr = _jsonstrController.text;
// if (jsonstr.isNotEmpty) {
// widget.onCourseAdded(jsonstr);
// Navigator.of(context).pop();
// }
// },
// ),
// ],
// );
// },
// );
// }
//
// @override
// Widget build(BuildContext context) {
// return ElevatedButton(
// onPressed: () {
// _showAddCourseDialog(context);
// },
// child: Text('json导入课程'),
// );
// }
//
// @override
// void dispose() {
// _jsonstrController.dispose();
// super.dispose();
// }
// }
// /*
// import 'package:flutter/material.dart';
// import 'package:timemanagerapp/Wighets/AddCourseFormWidget.dart';
//
// void main() {
// runApp(MyApp());
// }
//
// class MyApp extends StatelessWidget {
// @override
// Widget build(BuildContext context) {
// return MaterialApp(
// home: Scaffold(
// appBar: AppBar(
// title: Text('添加课程'),
// ),
// body: AddCourseFormWidget(),
// ),
// );
// }
// }
// */
// import 'package:flutter/material.dart';
// import 'package:sqflite/sqflite.dart';
// import 'package:timemanagerapp/controller/CourseController.dart';
// import 'package:timemanagerapp/controller/UserController.dart';
// import 'package:timemanagerapp/entity/Course.dart';
// import 'package:timemanagerapp/entity/User.dart';
// import 'package:timemanagerapp/database/MyDatebase.dart';
// import 'package:timemanagerapp/Wighets/TimetableWidget.dart';
//
// import '../main.dart';
// import '../ruters/AddCourseRoute.dart';
// import '../ruters/TimetableRoute.dart';
// import '../tests/database_test.dart';
// import 'package:timemanagerapp/Wighets/AddCourseFormWidget.dart';
//
// class TestWidget extends StatefulWidget {
// const TestWidget({Key? key}) : super(key: key);
//
// @override
// _HomePageState createState() => _HomePageState();
// }
//
// class _HomePageState extends State<TestWidget> {
// late UserController userController;
// late CourseController courseController;
//
// @override
// void initState() {
// super.initState();
// MyDatabase.initDatabase();
// userController = UserController.getInstance();
// courseController = CourseController.getInstance();
// }
//
// @override
// Widget build(BuildContext context) {
// return Center(
// child: Column(
// mainAxisAlignment: MainAxisAlignment.center,
// children: [
// ElevatedButton(
// onPressed: userController.deleteAllUsers,
// child: Text('删除所有用户'),
// ),
// ElevatedButton(
// onPressed: () => userController.insertUser(User(
// teamId: 3231, username: "测试用户", password: "23243", role: 1)),
// child: Text('插入一个测试用户'),
// ),
// ElevatedButton(
// onPressed: () {
// userController.getUsers().then((users) {
// showDialog(
// context: context,
// builder: (context) {
// return AlertDialog(
// title: Text('用户列表'),
// content: SingleChildScrollView(
// child: Column(
// mainAxisSize: MainAxisSize.min,
// children: users
// .map((user) => ListTile(
// title: Text(user['username']),
// subtitle: Text(user.toString()),
// ))
// .toList(),
// ),
// ),
// );
// },
// );
// });
// },
// child: Text('显示用户列表'),
// ),
// ElevatedButton(
// onPressed: courseController.deleteAllCourses,
// child: Text('删除所有课程'),
// ),
// // ElevatedButton(
// // onPressed: () => courseController.autoImportCours(jsonstr),
// // child: Text('导入课程(待开发)'),
// // ),
// ElevatedButton(
// onPressed: () => courseController.insertCourse(Course(
// userId: 1,
// courseId: 2,
// name: "测试课",
// credit: 3,
// teacher: "嘉豪",
// location: "638",
// remark: "happy",
// start: DateTime.now(),
// end: DateTime.now().add(Duration(hours: 2)))),
// child: Text('插入一个测试课程'),
// ),
// ElevatedButton(
// onPressed: () {
// // AddCourseFormWidget
// Navigator.push(
// context,
// MaterialPageRoute(
// builder: (context) {
// return AddCourseRoute();
// },
// ),
// );
// },
// child: Text('添加自定义课程'),
// ),
// ElevatedButton(
// onPressed: () {
// courseController.getCourses().then((courses) {
// showDialog(
// context: context,
// builder: (context) {
// return AlertDialog(
// title: Text('课程列表'),
// content: SingleChildScrollView(
// child: Column(
// mainAxisSize: MainAxisSize.min,
// children: courses
// .map((course) => ListTile(
// title: Text(course.getName),
// subtitle: Text(course.toString()),
// ))
// .toList(),
// ),
// ),
// );
// },
// );
// });
// },
// child: Text('显示课程列表'),
// ),
// ElevatedButton(
// onPressed: () {
// // AddCourseFormWidget
// Navigator.push(
// context,
// MaterialPageRoute(
// builder: (context) {
// return TimetableRoute();
// },
// ),
// );
// },
// child: Text('查看时间表'),
// ),
// AddCourseButton(
// onCourseAdded: (jsonstr) {
// // addCourse()
// // courseController.autoImportCours(jsonstr);
// }
// )
// ],
// ),
// );
// }
// }
//
// //string
//
// class AddCourseButton extends StatefulWidget {
// final Function(String jsonstr) onCourseAdded;
//
// AddCourseButton({required this.onCourseAdded});
//
// @override
// _AddCourseButtonState createState() => _AddCourseButtonState();
// }
//
// class _AddCourseButtonState extends State<AddCourseButton> {
// TextEditingController _jsonstrController = TextEditingController();
//
// void _showAddCourseDialog(BuildContext context) {
// showDialog(
// context: context,
// builder: (BuildContext context) {
// return AlertDialog(
// title: Text('json导入课程'),
// content: TextField(
// controller: _jsonstrController,
// decoration: InputDecoration(labelText: '请输入json字符串'),
// ),
// actions: <Widget>[
// TextButton(
// child: Text('取消'),
// onPressed: () {
// Navigator.of(context).pop();
// },
// ),
// TextButton(
// child: Text('确定'),
// onPressed: () {
// final jsonstr = _jsonstrController.text;
// if (jsonstr.isNotEmpty) {
// widget.onCourseAdded(jsonstr);
// Navigator.of(context).pop();
// }
// },
// ),
// ],
// );
// },
// );
// }
//
// @override
// Widget build(BuildContext context) {
// return ElevatedButton(
// onPressed: () {
// _showAddCourseDialog(context);
// },
// child: Text('json导入课程'),
// );
// }
//
// @override
// void dispose() {
// _jsonstrController.dispose();
// super.dispose();
// }
// }

@ -1,38 +1,38 @@
// import 'dart:developer';
//
// import 'package:flutter/material.dart';
// import 'package:shared_preferences/shared_preferences.dart';
// import 'package:timemanagerapp/setting/Setting.dart';
// import 'package:timemanagerapp/util/GetCourseByLogin.dart';
// import 'package:timemanagerapp/widgets/AddCourseFormWidget.dart';
// import 'package:timemanagerapp/widgets/LoginWidget.dart';
// import 'package:timemanagerapp/widgets/TimetableWidget.dart';
//
//
// init() async {
// WidgetsFlutterBinding.ensureInitialized();
// await Setting.init();
// }
//
// void main() async {
// await init();
// runApp(MyApp());
//
//
// }
//
// class MyApp extends StatelessWidget {
//
//
// @override
// Widget build(BuildContext context) {
// return MaterialApp(
// home: Scaffold(
// appBar: AppBar(
// title: Text('课表'),
// ),
// body: TimetableWidget(),
// ),
// );
// }
// }
import 'dart:developer';
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:timemanagerapp/setting/Setting.dart';
import 'package:timemanagerapp/util/GetCourseByLogin.dart';
import 'package:timemanagerapp/widgets/AddCourseFormWidget.dart';
import 'package:timemanagerapp/widgets/LoginWidget.dart';
import 'package:timemanagerapp/widgets/TimetableWidget.dart';
init() async {
WidgetsFlutterBinding.ensureInitialized();
await Setting.init();
}
void main() async {
await init();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('课表'),
),
body: TimetableWidget(),
),
);
}
}

@ -1,239 +1,263 @@
import 'dart:io';
import 'dart:convert';
import 'package:path_provider/path_provider.dart';
import 'package:timemanagerapp/entity/Course.dart';
import 'package:timemanagerapp/setting/Setting.dart';
import 'package:timemanagerapp/util/dataUtil.dart';
class GetCourseByLogin {
String id = ""; //
String passwd = ""; //
String year = "2023"; //
String term = "1"; //
DateTime termstartdate = Setting.startdate;
List<Course> courses = []; //
IdGenerator idGenerator = IdGenerator();
// GetCourseByLogin({this.id = "", this.passwd = "", this.year = "2021", this.term = "1"});
//
final List<List<String>> raspiyane = [
["8:00", "8:45"], //1
["8:50", "9:35"], //2
["10:05", "10:50"], //3
["10:55", "11:40"], //4
["13:30", "14:15"], //5
["14:20", "15:05"], //6
["15:35", "16:20"], //7
["16:25", "17:10"], //8
["18:30", "19:11"],
["19:20", "20:05"],
["20:10", "20:55"],
["21:10", "21:50"],
["22:05", "22:35"],
];
final weekdayMap = {
'': 1,
'': 2,
'': 3,
'': 4,
'': 5,
'': 6,
'': 7,
};
var pythonScriptPath = "/assets/pythoncode/getschedule.py";
Future<String> getRawString() async {
// var documentsDirectory = (await getApplicationDocumentsDirectory()).list();
// print("path = " + documentsDirectory.list().map((event) => event.path.toString()).toString());
// pythonScriptPath = documentsDirectory.path + pythonScriptPath;
final file = File(pythonScriptPath);
String res = "";
if (!file.existsSync()) {
print('Python脚本文件不存在: $pythonScriptPath');
// return "";
}
final process = await Process.start('python', [pythonScriptPath]);
// final process = await Process.start('python',['-c', pythonCode]);
process.stdin.writeln('$id');
process.stdin.writeln('$passwd');
process.stdin.writeln('$year');
process.stdin.writeln('$term');
process.stdout.transform(utf8.decoder).listen((data) {
print('$data');
res += data;
});
process.stderr.transform(utf8.decoder).listen((data) {
print('Python Error: $data');
res += data;
});
final exitCode = await process.exitCode;
return Future(() => res);
}
dealRawString(String rawStr) async {
rawStr = rawStr.replaceAll("'", "\"");
// JSON
final jsonData = jsonDecode(rawStr);
final data = jsonData['data'];
final coursesData = data['courses'];
for (var courseData in coursesData) {
final courseId = courseData['course_id'];
final courseTime = courseData['time'];
final courseTitle = courseData['title'];
//
final timeRegex = RegExp(r'星期([一二三四五六日])第(\d+)-(\d+)节\{([^{}]+)\}'); //Bug:/d+
final match = timeRegex.firstMatch(courseTime);
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(',');
for (var weekRange in weekRanges) {
//
// weekRange = weekRange.replaceAll('', '1').replaceAll('', '2');
//
// final weekRegex = RegExp(r'(\d+)-(\d+)周');
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
//
for (var week = startWeek; week <= endWeek; week++) {
//
if (week % 2 == 0 && weekType == '' ||
week % 2 == 1 && weekType == '') {
continue;
}
//
final startdate = termstartdate.add(Duration(
days: (7 * (week - 1) + weekday! - 1),
hours: int.parse(raspiyane[startSection - 1][0].split(':')[0]),
minutes:
int.parse(raspiyane[startSection - 1][0].split(':')[1]),
));
final endDate = termstartdate.add(Duration(
days: (7 * (week - 1) + weekday! - 1),
hours: int.parse(raspiyane[endSection - 1][1].split(':')[0]),
minutes: int.parse(raspiyane[endSection - 1][1].split(':')[1]),
));
// Course
final course = Course(
id: await idGenerator.generateId(),
userId: Setting.user != null ? Setting.user!.id : null,
courseId: sameCourseId,
name: courseTitle,
credit: courseData['credit'],
teacher: courseData['teacher'],
location: courseData['place'],
remark: "学校导入课程",
startTime: startdate,
endTime: endDate,
);
courses.add(course);
}
}
}
}
}
return courses;
}
run() async {
String rawStr = await getRawString();
await dealRawString(rawStr);
// printcourseinfo();
return courses;
}
printcourseinfo() {
if (courses.length != 0) {
for (Course course in courses) {
print("====================================");
print("name = " + course.name);
print("id = " + course.id.toString());
print("credit = " + course.credit.toString());
print("teacher = " + course.teacher);
print("location = " + course.location);
print("start = " + course.startTime.toString());
print("end = " + course.endTime.toString());
}
} else {
print("null");
}
}
String _extractValue(String source, String key) {
final startIndex = source.indexOf(key) + key.length;
final endIndex = source.indexOf("'", startIndex);
return source.substring(startIndex, endIndex);
}
List<int> getweeklist(String weekstr) {
List<int> ans = [];
if (weekstr.contains('-')) {
if (weekstr.contains('')) {
weekstr = weekstr.replaceAll('(单)', '');
var weekstrlist = weekstr.split('-');
var startweek = int.parse(weekstrlist[0]);
var endweek = int.parse(weekstrlist[1]);
for (int i = startweek; i <= endweek; i++) {
if (i % 2 == 1) {
ans.add(i);
}
}
} else if (weekstr.contains('')) {
weekstr = weekstr.replaceAll('(双)', '');
var weekstrlist = weekstr.split('-');
var startweek = int.parse(weekstrlist[0]);
var endweek = int.parse(weekstrlist[1]);
for (int i = startweek; i <= endweek; i++) {
if (i % 2 == 0) {
ans.add(i);
}
}
} else {
var weekstrlist = weekstr.split('-');
var startweek = int.parse(weekstrlist[0]);
var endweek = int.parse(weekstrlist[1]);
for (int i = startweek; i <= endweek; i++) {
ans.add(i);
}
}
} else if (weekstr.contains(',')) {
var weekstrlist = weekstr.split(',');
for (String week in weekstrlist) {
ans.add(int.parse(week));
}
} else {
ans.add(int.parse(weekstr));
}
return ans;
}
}
import 'dart:io';
import 'dart:convert';
import 'package:path_provider/path_provider.dart';
import 'package:timemanagerapp/entity/Course.dart';
import 'package:timemanagerapp/setting/Setting.dart';
import 'package:timemanagerapp/util/dataUtil.dart';
class GetCourseByLogin {
String id = "210340156"; //
String passwd = "123111@qaq"; //
String year = "2022"; //
String term = "1"; //
DateTime termstartdate = Setting.startdate;
List<Course> courses = []; //
IdGenerator idGenerator = IdGenerator();
// GetCourseByLogin({this.id = "", this.passwd = "", this.year = "2021", this.term = "1"});
//
final List<List<String>> raspiyane = [
["8:00", "8:45"], //1
["8:50", "9:35"], //2
["10:05", "10:50"], //3
["10:55", "11:40"], //4
["13:30", "14:15"], //5
["14:20", "15:05"], //6
["15:35", "16:20"], //7
["16:25", "17:10"], //8
["18:30", "19:11"],
["19:20", "20:05"],
["20:10", "20:55"],
["21:10", "21:50"],
["22:05", "22:35"],
];
final weekdayMap = {
'': 1,
'': 2,
'': 3,
'': 4,
'': 5,
'': 6,
'': 7,
};
var pythonScriptPath = "/assets/pythoncode/getschedule.py";
Future<String> getRawString() async {
// var documentsDirectory = (await getApplicationDocumentsDirectory()).list();
// print("path = " + documentsDirectory.list().map((event) => event.path.toString()).toString());
// pythonScriptPath = documentsDirectory.path + pythonScriptPath;
final file = File(pythonScriptPath);
String res = "";
if (!file.existsSync()) {
print('Python脚本文件不存在: $pythonScriptPath');
// return "";
}
final process = await Process.start('python', [pythonScriptPath]);
// final process = await Process.start('python',['-c', pythonCode]);
process.stdin.writeln('$id');
process.stdin.writeln('$passwd');
process.stdin.writeln('$year');
process.stdin.writeln('$term');
process.stdout.transform(utf8.decoder).listen((data) {
print('$data');
res += data;
});
process.stderr.transform(utf8.decoder).listen((data) {
print('Python Error: $data');
res += data;
});
final exitCode = await process.exitCode;
return Future(() => res);
}
dealRawString(String rawStr) async {
rawStr = rawStr.replaceAll("'", "\"");
// JSON
final jsonData = jsonDecode(rawStr);
final data = jsonData['data'];
final coursesData = data['courses'];
for (var courseData in coursesData) {
final courseId = courseData['course_id'];
final courseTime = courseData['time'];
final courseTitle = courseData['title'];
//
final timeRegex = RegExp(r'星期([一二三四五六日])第(\d)-(\d)节\{([^{}]+)\}');
final match = timeRegex.firstMatch(courseTime);
if (match != null) {
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('');
for (var weekRange in weekRanges) {
//
// weekRange = weekRange.replaceAll('', '1').replaceAll('', '2');
//
// final weekRegex = RegExp(r'(\d+)-(\d+)周');
final weekRegex = RegExp(r'(\d+)-(\d+)周(?:\((单|双)\))?');
final weekMatch = weekRegex.firstMatch(weekRange);
if (weekMatch != null) {
final startWeek = int.parse(weekMatch.group(1)!);
final endWeek = int.parse(weekMatch.group(2)!);
final weekType = weekMatch.group(3); // null
//
for (var week = startWeek; week <= endWeek; week++) {
//
if (week % 2 == 0 && weekType == '' ||
week % 2 == 1 && weekType == '') {
continue;
}
//
final startdate = termstartdate.add(Duration(
days: (7 * (week - 1) + weekday! - 1),
hours: int.parse(raspiyane[startSection - 1][0].split(':')[0]),
minutes:
int.parse(raspiyane[startSection - 1][0].split(':')[1]),
));
final endDate = termstartdate.add(Duration(
days: (7 * (week - 1) + weekday! - 1),
hours: int.parse(raspiyane[endSection - 1][1].split(':')[0]),
minutes: int.parse(raspiyane[endSection - 1][1].split(':')[1]),
));
// Course
final course = Course(
id: int.parse(courseId),
userId: Setting.user != null ? Setting.user!.id : null,
courseId: await idGenerator.generateId(),
name: courseTitle,
credit: courseData['credit'],
teacher: courseData['teacher'],
location: courseData['place'],
remark: "schoolclass",
start: startdate,
end: 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);
// }
}
}
}
}
}
return courses;
}
run() async {
String rawStr = await getRawString();
await dealRawString(rawStr);
// printcourseinfo();
return courses;
}
printcourseinfo() {
if (courses.length != 0) {
for (Course course in courses) {
print("====================================");
print("name = " + course.name);
print("id = " + course.id.toString());
print("credit = " + course.credit.toString());
print("teacher = " + course.teacher);
print("location = " + course.location);
print("start = " + course.start.toString());
print("end = " + course.end.toString());
}
} else {
print("null");
}
}
String _extractValue(String source, String key) {
final startIndex = source.indexOf(key) + key.length;
final endIndex = source.indexOf("'", startIndex);
return source.substring(startIndex, endIndex);
}
List<int> getweeklist(String weekstr) {
List<int> ans = [];
if (weekstr.contains('-')) {
if (weekstr.contains('')) {
weekstr = weekstr.replaceAll('(单)', '');
var weekstrlist = weekstr.split('-');
var startweek = int.parse(weekstrlist[0]);
var endweek = int.parse(weekstrlist[1]);
for (int i = startweek; i <= endweek; i++) {
if (i % 2 == 1) {
ans.add(i);
}
}
} else if (weekstr.contains('')) {
weekstr = weekstr.replaceAll('(双)', '');
var weekstrlist = weekstr.split('-');
var startweek = int.parse(weekstrlist[0]);
var endweek = int.parse(weekstrlist[1]);
for (int i = startweek; i <= endweek; i++) {
if (i % 2 == 0) {
ans.add(i);
}
}
} else {
var weekstrlist = weekstr.split('-');
var startweek = int.parse(weekstrlist[0]);
var endweek = int.parse(weekstrlist[1]);
for (int i = startweek; i <= endweek; i++) {
ans.add(i);
}
}
} else if (weekstr.contains(',')) {
var weekstrlist = weekstr.split(',');
for (String week in weekstrlist) {
ans.add(int.parse(week));
}
} else {
ans.add(int.parse(weekstr));
}
return ans;
}
}

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save