develop
LRC 2 years ago
parent 2b25daf42b
commit 79018f3b70

@ -5,7 +5,7 @@ plugins {
}
def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
def localPropertiesFile = rootProject.file('key.properties')
if (localPropertiesFile.exists()) {
localPropertiesFile.withReader('UTF-8') { reader ->
localProperties.load(reader)
@ -43,11 +43,18 @@ android {
versionName flutterVersionName
}
// signingConfigs {
// release {
// keyAlias keystoreProperties['keyAlias']
// keyPassword keystoreProperties['keyPassword']
// storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
// storePassword keystoreProperties['storePassword']
// }
// }
buildTypes {
release {
// TODO: Add your own signing config for the release build.
// Signing with the debug keys for now, so `flutter run --release` works.
signingConfig signingConfigs.debug
// signingConfig signingConfigs.release
}
}
}

@ -4,4 +4,9 @@
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>

@ -1,8 +1,10 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application
android:label="timemanagerapp"
android:label="TimeManager"
android:name="${applicationName}"
android:icon="@mipmap/ic_launcher">
android:usesCleartextTraffic="true" //http
<activity
android:name=".MainActivity"
android:exported="true"
@ -30,4 +32,10 @@
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>

@ -4,4 +4,9 @@
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>

@ -13,8 +13,8 @@ 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/";
// String baseUrl = "http://5902e9v900.zicp.fun:30002/";
String baseUrl = "http://5902e9v900.zicp.fun:3000/";
//--------------------------------------------------
//getUserList
@ -31,6 +31,7 @@ class NetWorkController {
.toList();
return userList;
} else {
print("获取用户列表");
return null;
}
}
@ -50,7 +51,7 @@ class NetWorkController {
if (jsonResponse['code'] == 200) {
return User.fromJson(jsonResponse['data']['user'][0]);
} else {
print("login failed");
print("登录失败");
return null;
}
}
@ -68,7 +69,7 @@ class NetWorkController {
if (jsonResponse['code'] == 200) {
return true;
} else {
print("login failed");
print("注册失败");
return false;
}
}
@ -87,6 +88,7 @@ class NetWorkController {
if (jsonResponse['code'] == 200) {
return true;
} else {
print("删除所有用户失败");
return false;
}
}
@ -108,11 +110,12 @@ class NetWorkController {
.toList();
return teamList;
} else {
print("获取My团队列表失败");
return null;
}
}
Future<List<Team>?> getAllTeamList(int userId) async {
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>{
@ -128,10 +131,32 @@ class NetWorkController {
.toList();
return teamList;
} else {
print("获取All团队列表ByUserId失败");
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'),
@ -145,6 +170,7 @@ class NetWorkController {
if (jsonResponse['code'] == 200) {
return true;
} else {
print("insert team 失败:");
return false;
}
}
@ -251,7 +277,27 @@ class NetWorkController {
//--------------------------------------------------
Future<List<Work>?> getTeamWorkList(int teamId) async {
final response = await http.get(
Uri.parse(baseUrl + 'get_work').replace(queryParameters: {'id': teamId.toString()}),
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',
},
@ -325,6 +371,7 @@ class NetWorkController {
.toList();
return freeTimeList;
} else {
print("获取空闲时间失败");
return null;
}
}
@ -345,6 +392,7 @@ class NetWorkController {
.toList();
return courseList;
} else {
print("获取课程失败");
return null;
}
}
@ -362,6 +410,7 @@ class NetWorkController {
if (jsonResponse['code'] == 200) {
return true;
} else {
print("插入课程失败");
return false;
}
}
@ -379,6 +428,7 @@ class NetWorkController {
if (jsonResponse['code'] == 200) {
return true;
} else {
print("更新课程失败");
return false;
}
}
@ -396,6 +446,7 @@ class NetWorkController {
if (jsonResponse['code'] == 200) {
return true;
} else {
print("删除课程失败");
return false;
}
}
@ -416,6 +467,7 @@ class NetWorkController {
.toList();
return taskList;
} else {
print("获取个人计划失败");
return null;
}
}
@ -433,6 +485,7 @@ class NetWorkController {
if (jsonResponse['code'] == 200) {
return true;
} else {
print("更新个人计划失败");
return false;
}
}
@ -450,6 +503,7 @@ class NetWorkController {
if (jsonResponse['code'] == 200) {
return true;
} else {
print("插入个人计划失败");
return false;
}
}
@ -467,6 +521,7 @@ class NetWorkController {
if (jsonResponse['code'] == 200) {
return true;
} else {
print("删除个人计划失败");
return false;
}
}
@ -501,6 +556,7 @@ class NetWorkController {
if(data['code'] == 1000){
return resJson;
}else{
print("获取导入课程失败");
return null;
}
}

@ -66,7 +66,7 @@ class TeamController {
//
joindedTeamList = [];
allTeamList = [];
List<Team>? res = await netWorkController.getAllTeamList(Setting.user!.getId!);
List<Team>? res = await netWorkController.getAllTeamListByUserId(Setting.user!.getId!);
if(res==null){
return [];
}else{
@ -75,7 +75,7 @@ class TeamController {
for(Team team in allTeamList){
teamIdMap[team.id!] = team;
}
joindedTeamList = allTeamList;
joindedTeamList.addAll(allTeamList); //=
for(Team team in myTeamList){
// myTeamList
joindedTeamList.removeWhere((element) => element.id == team.id);

@ -1,13 +1,13 @@
import 'dart:ui';
import 'package:timemanagerapp/entity/Course.dart';
import 'package:timemanagerapp/entity/FreeTime.dart';
import 'package:timemanagerapp/setting/Setting.dart';
class TimetableWidgetController {
late List<Course> courseList;
late DateTime mondayTime;
late int weekCount;
late DateTime termStartDate;
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),
@ -41,7 +41,7 @@ class TimetableWidgetController {
}
//piexl
List<Offset> convertTimeList(List<DateTime> timePoints, double deviceWidth) {
static List<Offset> convertTimeList(List<DateTime> timePoints, double deviceWidth) {
List<Offset> convertedTimes = [];
for (var time in timePoints) {
int hour = time.hour;
@ -55,12 +55,66 @@ class TimetableWidgetController {
return convertedTimes;
}
int getWeekCount() {
weekCount = DateTime.now().difference(termStartDate).inDays ~/ 7 + 1;
//
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;
}
DateTime getmondayTime() {
static DateTime getmondayTime() {
mondayTime = DateTime.now();
//
while (mondayTime.weekday != 1) {
@ -69,6 +123,36 @@ class TimetableWidgetController {
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) {

@ -71,6 +71,22 @@ class UserController {
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 {

@ -1,133 +1,133 @@
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);
}
}
// 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);
// }
//
//
//
// }

@ -72,9 +72,9 @@ class Course {
String get getRemark => remark;
DateTime get getstartTime => startTime;
DateTime get getStartTime => startTime;
DateTime get getendTime => endTime;
DateTime get getEndTime => endTime;
// Setter methods
set setId(int newId) {

@ -13,7 +13,7 @@ class AddCourseRoute extends StatelessWidget {
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('添加自定义课程'),
title: Text('编辑自定义课程'),
),
body: AddCourseFormWidget(exitCourse: exitCourse),
);

@ -9,7 +9,7 @@ class AddTeamRoute extends StatelessWidget {
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('添加团队'),
title: Text('编辑团队信息'),
),
body: AddTeamWidget(),
);

@ -7,10 +7,19 @@ import '../widgets/TeamWidget.dart';
class TeamRoute extends StatelessWidget {
//TeamWidgetKey
GlobalKey<TeamWidgetState> teamWidgetKey = GlobalKey();
@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(
@ -26,8 +35,9 @@ class TeamRoute extends StatelessWidget {
appBar: AppBar(
title: Text('我的团队'),
),
body: TeamWidget(),
body: TeamWidget(key: Setting.teamWidgetKey!),
floatingActionButton: FloatingActionButton(
//
onPressed: () async {
await Navigator.push(
context,
@ -37,7 +47,7 @@ class TeamRoute extends StatelessWidget {
},
),
);
teamWidgetKey.currentState!.futureDo();
Setting.teamWidgetKey!.currentState!.futureDo();
},
child: Icon(Icons.add),
),

@ -1,13 +1,19 @@
import 'dart:ffi';
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 int termAllWeekCout = 20; //
static DateTime timeTableStartTime = DateTime(2023, 8, 28, 7, 00); //
static DateTime timeTableEndTime = DateTime(2023, 8, 28, 23, 00); //
static late DateTime startdate;
static late User? user;
static User nullUser = User(id:-1, username: "null", password: "null", role: 0);
@ -16,6 +22,10 @@ class Setting {
static bool isMusicPlaying = false; //
static bool isDeveloperButtonVisible = false; //
static GlobalKey<TimetableWidgetState>? timetableWidgetKey;
static GlobalKey<TeamWidgetState>? teamWidgetKey;
static GlobalKey<FreeTimetableWidgetState>? freeTimetableWidgeKey;
static init() async {
//
print("Setting初始化");

@ -6,6 +6,7 @@ import 'package:timemanagerapp/controller/CourseController.dart';
import 'package:timemanagerapp/entity/Course.dart';
import 'package:timemanagerapp/entity/CourseForm.dart';
import '../controller/TimetableWidgetController.dart';
import '../provider/TimeProvider.dart';
class AddCourseFormWidget extends StatefulWidget {
const AddCourseFormWidget({Key? key,this.exitCourse}) : super(key: key);
@ -72,6 +73,9 @@ class _AddCourseFormWidgetState extends State<AddCourseFormWidget> {
note = exitCourse!.getRemark;
teacher = exitCourse!.getTeacher;
location = exitCourse!.getLocation;
selectedDays = TimetableWidgetController.getSelectDayList(exitCourse!.getStartTime);
startWeek = TimetableWidgetController.getWeekCount(dateTime:exitCourse!.getStartTime).toString();
endWeek = TimetableWidgetController.getWeekCount(dateTime:exitCourse!.getEndTime).toString();
}
_courseController = TextEditingController(text: course);
@ -121,6 +125,7 @@ class _AddCourseFormWidgetState extends State<AddCourseFormWidget> {
SizedBox(height: 16.0),
MultiSelectDialogField<String>(
items: daysList,
initialValue: selectedDays, //
title: Text('上课日*'),
validator: (values) {
if (values == null || values.isEmpty) {

@ -8,6 +8,7 @@ import 'package:timemanagerapp/controller/WorkController.dart';
import 'package:timemanagerapp/entity/ScheduleForm.dart';
import 'package:timemanagerapp/entity/Task.dart';
import '../controller/TimetableWidgetController.dart';
import '../provider/TimeProvider.dart';
class AddScheduleFormWidget extends StatefulWidget {
AddScheduleFormWidget({Key? key,required this.scheduleType,this.teamId,this.exitSchedule}) : super(key: key);
@ -25,6 +26,8 @@ class _AddScheduleFormWidgetState extends State<AddScheduleFormWidget> {
late TextEditingController _nameController;
late TextEditingController _contenController;
late TextEditingController _startWeekController;
late TextEditingController _endWeekController;
final String scheduleType;//taskwork
final int? teamId ;
@ -46,7 +49,7 @@ class _AddScheduleFormWidgetState extends State<AddScheduleFormWidget> {
List<String> selectedDays = [];
List<MultiSelectItem<String>> daysList = [
static List<MultiSelectItem<String>> daysList = [
MultiSelectItem('周一', ''),
MultiSelectItem('周二', ''),
MultiSelectItem('周三', ''),
@ -72,10 +75,18 @@ class _AddScheduleFormWidgetState extends State<AddScheduleFormWidget> {
if(exitSchedule != null){
name = exitSchedule.getName;
content = exitSchedule.getContent;
startTime = exitSchedule.getStartTime;
endTime = exitSchedule.getEndTime;
selectedDays = TimetableWidgetController.getSelectDayList(exitSchedule!.getStartTime);
startWeek = TimetableWidgetController.getWeekCount(dateTime:exitSchedule!.getStartTime).toString();
endWeek = TimetableWidgetController.getWeekCount(dateTime:exitSchedule!.getEndTime).toString();
}
_nameController = TextEditingController(text: name);
_contenController = TextEditingController(text: content);
_startWeekController = TextEditingController(text: startWeek);
_endWeekController = TextEditingController(text: endWeek);
}
@override
@ -109,6 +120,7 @@ class _AddScheduleFormWidgetState extends State<AddScheduleFormWidget> {
SizedBox(height: 16.0),
MultiSelectDialogField<String>(
items: daysList,
initialValue: selectedDays, //
title: Text('星期几*'),
validator: (values) {
if (values == null || values.isEmpty) {
@ -124,6 +136,7 @@ class _AddScheduleFormWidgetState extends State<AddScheduleFormWidget> {
),
SizedBox(height: 16.0),
TextFormField(
controller: _startWeekController,
decoration: InputDecoration(labelText: '开始周'),
onSaved: (value) => startWeek = value ?? '',
validator: (value) {
@ -135,6 +148,7 @@ class _AddScheduleFormWidgetState extends State<AddScheduleFormWidget> {
),
SizedBox(height: 16.0),
TextFormField(
controller: _endWeekController,
decoration: InputDecoration(labelText: '结束周'),
onSaved: (value) => endWeek = value ?? '',
validator: (value) {
@ -151,7 +165,7 @@ class _AddScheduleFormWidgetState extends State<AddScheduleFormWidget> {
),
controller: TextEditingController(
text: startTime != null
? '${startTime!.hour}:${startTime!.minute}'
? '${startTime!.hour.toString().padLeft(2, '0')}:${startTime!.minute.toString().padLeft(2, '0')}'
: '',
),
readOnly: true,
@ -180,7 +194,7 @@ class _AddScheduleFormWidgetState extends State<AddScheduleFormWidget> {
),
controller: TextEditingController(
text: endTime != null
? '${endTime!.hour}:${endTime!.minute}'
? '${endTime!.hour.toString().padLeft(2, '0')} :${endTime!.minute.toString().padLeft(2, '0')}'
: '',
),
readOnly: true,
@ -216,7 +230,7 @@ class _AddScheduleFormWidgetState extends State<AddScheduleFormWidget> {
ElevatedButton(
onPressed: () {
//
if (_formKey.currentState!.validate()) {
if (_formKey.currentState!.validate()&&startTime!=endTime!&&startTime.isBefore(endTime!)) {
_formKey.currentState!.save();
//
scheduleForm.name = name;
@ -230,7 +244,7 @@ class _AddScheduleFormWidgetState extends State<AddScheduleFormWidget> {
if(exitSchedule != null){//
taskController.deleteTaskByTaskid(exitSchedule!.getTaskId).then((value){
taskController.addScheduleForm(scheduleForm).then(((value){
Provider.of<TimeProvider>(context, listen: false).updateTimetable(); //
// Provider.of<TimeProvider>(context, listen: false).updateTimetable(); //
//
// Provider.of<TimeProvider>(context, listen: false).updateTimetable(); //
// timePro.updatTimtTablecount++;
@ -239,7 +253,7 @@ class _AddScheduleFormWidgetState extends State<AddScheduleFormWidget> {
});
}else{
taskController.addScheduleForm(scheduleForm).then(((value){
Provider.of<TimeProvider>(context, listen: false).updateTimetable(); //
// Provider.of<TimeProvider>(context, listen: false).updateTimetable(); //
//
// Provider.of<TimeProvider>(context, listen: false).updateTimetable(); //
// timePro.updatTimtTablecount++;
@ -250,7 +264,7 @@ class _AddScheduleFormWidgetState extends State<AddScheduleFormWidget> {
if(exitSchedule != null){//
teamController.deleteWorkByWorkId(exitSchedule!.getWorkId).then((value){
teamController.addScheduleForm(scheduleForm,teamId!).then(((value){
Provider.of<TimeProvider>(context, listen: false).updateTimetable(); //
// Provider.of<TimeProvider>(context, listen: false).updateTimetable(); //
//
// Provider.of<TimeProvider>(context, listen: false).updateTimetable(); //
// timePro.updatTimtTablecount++;
@ -259,13 +273,47 @@ class _AddScheduleFormWidgetState extends State<AddScheduleFormWidget> {
});
}else{
teamController.addScheduleForm(scheduleForm,teamId!).then(((value){
Provider.of<TimeProvider>(context, listen: false).updateTimetable(); //
// Provider.of<TimeProvider>(context, listen: false).updateTimetable(); //
//
// timePro.updatTimtTablecount++;
Navigator.pop(context);
}));
}
}
}else{
if(startTime==endTime){
showDialog(
context: context,
builder: (context) {
return AlertDialog(
title: Text('时间错误'),
content: Text('开始时间和结束时间不能相同'),
actions: <Widget>[
TextButton(
onPressed: () => Navigator.pop(context),
child: Text('确定'),
),
],
);
},
);
}else if(startTime!.isAfter(endTime!)){
showDialog(
context: context,
builder: (context) {
return AlertDialog(
title: Text('时间错误'),
content: Text('开始时间不能晚于结束时间'),
actions: <Widget>[
TextButton(
onPressed: () => Navigator.pop(context),
child: Text('确定'),
),
],
);
},
);
}
}
},
child: Text('确定'),

@ -5,6 +5,8 @@ import 'package:timemanagerapp/entity/Team.dart';
import '../setting/Setting.dart';
class AddTeamWidget extends StatefulWidget {
const AddTeamWidget({Key? key}) : super(key: key);
@override
_AddTeamWidgetState createState() => _AddTeamWidgetState();
}

@ -48,7 +48,8 @@ class _AutoImportWidgetState extends State<AutoImportWidget> {
loading = false;
});
if (res != 0) {
Provider.of<TimeProvider>(context, listen: false).updateTimetable(); //
// Provider.of<TimeProvider>(context, listen: false).updateTimetable(); //
Setting.timetableWidgetKey!.currentState!.localFutureDo();
Navigator.pop(context);
} else {
showDialog(

@ -8,11 +8,13 @@ import 'package:timemanagerapp/controller/TeamController.dart';
import '../controller/TimetableWidgetController.dart';
import '../entity/FreeTime.dart';
import '../entity/Team.dart';
import '../entity/Work.dart';
import '../provider/TimeProvider.dart';
import '../ruters/AddScheduleRoute.dart';
import '../setting/Setting.dart';
class FreeTimetableWidget extends StatefulWidget {
FreeTimetableWidget({Key ? key,required this.team}) : super(key: key);
FreeTimetableWidget({required Key key,required this.team}) : super(key: key);
final double deviceWidth = Setting.deviceWidth;
final Team team;
@ -54,23 +56,7 @@ class FreeTimetableWidgetState extends State<FreeTimetableWidget> {
final double hourHeight = 60.0 * 1.5;
//DateTimePiexl
List<DateTime> timePoints = [
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),
];
//Offset
var positions = [];
@ -82,6 +68,10 @@ class FreeTimetableWidgetState extends State<FreeTimetableWidget> {
//
freeTimeBlockList = await teamController.getFreeTime(team.getId!);
//
freeTimeBlockList = timetableWidgetController
.repairFreeTimeBlockList(freeTimeBlockList);
dataCaculateAfterFutherDo();
print('serverFutureDo 完成');
@ -93,12 +83,13 @@ class FreeTimetableWidgetState extends State<FreeTimetableWidget> {
@override
initState() {
super.initState();
//
freeTimeBlockWeekMap = {};
freeTimeBlockList = [];
//
currentWeek = timetableWidgetController.getWeekCount();
currentWeek = TimetableWidgetController.getWeekCount();
showWeek = currentWeek;
// showWeek = 1;
//
@ -118,7 +109,7 @@ class FreeTimetableWidgetState extends State<FreeTimetableWidget> {
var mondayTime = timetableWidgetController.getmondayTime();
var mondayTime = TimetableWidgetController.getmondayTime();
//showMon
showMonth = mondayTime.add(Duration(days: 7 * (showWeek - currentWeek))).month;
@ -134,7 +125,7 @@ class FreeTimetableWidgetState extends State<FreeTimetableWidget> {
}
//
positions =
timetableWidgetController.convertTimeList(timePoints, deviceWidth);
TimetableWidgetController.convertTimeList(TimetableWidgetController.timePoints, deviceWidth);
}
@ -152,27 +143,22 @@ class FreeTimetableWidgetState extends State<FreeTimetableWidget> {
onRefresh: () {
print('下拉refresh');
return serverFutureDo().then((value){
// Provider.of<TimeProvider>(context, listen: false).updateTimetable(); //
});
},
child: GestureDetector(
onHorizontalDragEnd: (details) {
// teamController.getFreeTime(tea).then((value){
// workList = value;
// setState(() {
//
// });
// });
serverFutureDo();
if (details.primaryVelocity! > 0) {
//
setState(() {
showWeek--;
dataCaculateAfterFutherDo();
});
} else if (details.primaryVelocity! < 0) {
//
setState(() {
showWeek++;
dataCaculateAfterFutherDo();
});
}
},
@ -289,12 +275,12 @@ class FreeTimetableWidgetState extends State<FreeTimetableWidget> {
child: Row(
children: [
Text(
timePoints[index]
TimetableWidgetController.timePoints[index]
.hour
.toString()
.padLeft(2, '0') +
':' +
timePoints[index]
TimetableWidgetController.timePoints[index]
.minute
.toString()
.padLeft(2, '0'),
@ -363,7 +349,9 @@ class FreeTimetableWidgetState extends State<FreeTimetableWidget> {
children: [
FreeTimeBlockContenWidget(
currentItem:
currentItem),
currentItem,
team: team,
),
],
),
),
@ -431,10 +419,12 @@ class BlockGestureWidget extends StatelessWidget {
super.key,
required this.currentItem,
required this.blockGestureWidgetChilld,
required this.team,
});
final currentItem;
final blockGestureWidgetChilld;
final Team team;
@override
Widget build(BuildContext context) {
@ -446,7 +436,7 @@ class BlockGestureWidget extends StatelessWidget {
builder: (BuildContext context) {
return AlertDialog(
// currentItem
title: Text(currentItem.name),
title: Text('空闲时间'),
content: SingleChildScrollView(
child: ListBody(
children: <Widget>[
@ -468,6 +458,52 @@ class BlockGestureWidget extends StatelessWidget {
},
);
},
onLongPress: () {
//
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text('菜单'),
content: Column(
mainAxisSize: MainAxisSize.min,
children: [
ElevatedButton(
onPressed: () async {
//
await Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
return AddScheduleRoute(
scheduleType: "work",
teamId: team.id!,
exitSchedule: Work(
startTime: currentItem.startTime,
endTime: currentItem.endTime,
teamId: team.id!,
userId: Setting.user!.id!,
status: '',
content: '',
name: '',
workId: 0,
)
);
},
),
);
Navigator.of(context).pop();
Setting.freeTimetableWidgeKey!.currentState!.serverFutureDo();
},
child: Text('添加团队任务'),
),
SizedBox(height: 10),
],
),
);
},
);
},
child: blockGestureWidgetChilld,
);
}
@ -476,10 +512,11 @@ class BlockGestureWidget extends StatelessWidget {
class FreeTimeBlockContenWidget extends StatelessWidget {
const FreeTimeBlockContenWidget({
super.key,
required this.currentItem,
required this.currentItem, required this.team,
});
final currentItem;
final Team team;
@override
Widget build(BuildContext context) {
@ -492,7 +529,10 @@ class FreeTimeBlockContenWidget extends StatelessWidget {
':' +
(currentItem as FreeTime).startTime.minute.toString().padLeft(2, '0'),
style: TextStyle(
fontSize: 10,
fontSize: 12,
color: Colors.black,
//
fontWeight: FontWeight.bold,
),
overflow: TextOverflow.clip,
),
@ -501,12 +541,16 @@ class FreeTimeBlockContenWidget extends StatelessWidget {
':' +
(currentItem as FreeTime).endTime.minute.toString().padLeft(2, '0'),
style: TextStyle(
fontSize: 10,
fontSize: 12,
color: Colors.black,
//
fontWeight: FontWeight.bold,
),
overflow: TextOverflow.clip,
),
],
),
team: team,
);
}
}

@ -28,7 +28,6 @@ class HomeWidget extends StatefulWidget {
}
class _HomeWidgetState extends State<HomeWidget> {
GlobalKey<TimetableWidgetState> timetableWidgetKey = GlobalKey(); //key,,TimetableWidgetState
late UserController userController;
late CourseController courseController;
@ -39,6 +38,8 @@ class _HomeWidgetState extends State<HomeWidget> {
@override
void initState() {
super.initState();
Setting.timetableWidgetKey = GlobalKey(); //key,,TimetableWidgetState;
userController = UserController.getInstance();
courseController = CourseController.getInstance();
}
@ -77,6 +78,7 @@ class _HomeWidgetState extends State<HomeWidget> {
children: [
ElevatedButton(
onPressed: () async {
Navigator.of(context).pop();//
// AddCourseFormWidget
await Navigator.push(
context,
@ -91,12 +93,13 @@ class _HomeWidgetState extends State<HomeWidget> {
// });
//
// print("触发更新课程表");
timetableWidgetKey.currentState!.localFutureDo();
Setting.timetableWidgetKey!.currentState!.localFutureDo();
},
child: Text('添加课程'),
),
ElevatedButton(
onPressed: () async {
Navigator.of(context).pop();//
// AddCourseFormWidget
await Navigator.push(
context,
@ -109,7 +112,7 @@ class _HomeWidgetState extends State<HomeWidget> {
},
),
);
timetableWidgetKey.currentState!.localFutureDo();
Setting.timetableWidgetKey!.currentState!.localFutureDo();
},
child: Text('添加个人计划'),
),
@ -149,8 +152,8 @@ class _HomeWidgetState extends State<HomeWidget> {
},
),
);
timetableWidgetKey.currentState!.serverFutureDo();
timetableWidgetKey.currentState!.localFutureDo();
Setting.timetableWidgetKey!.currentState!.serverFutureDo();
Setting.timetableWidgetKey!.currentState!.localFutureDo();
},
),
Builder(
@ -188,7 +191,7 @@ class _HomeWidgetState extends State<HomeWidget> {
await Setting.saveInitFlag(true);
}
setState(() {});
timetableWidgetKey.currentState!.localFutureDo();
Setting.timetableWidgetKey!.currentState!.localFutureDo();
},
child: Setting.user!.getId! != -1
? Text(Setting.user!.getUsername!)
@ -212,7 +215,7 @@ class _HomeWidgetState extends State<HomeWidget> {
await Setting.saveInitFlag(true);
}
setState(() {});
timetableWidgetKey.currentState!.localFutureDo();
Setting.timetableWidgetKey!.currentState!.localFutureDo();
},
child: Setting.user!.getId! != -1
? Text('退出登录')
@ -236,7 +239,7 @@ class _HomeWidgetState extends State<HomeWidget> {
},
),
);
timetableWidgetKey.currentState!.localFutureDo();
Setting.timetableWidgetKey!.currentState!.localFutureDo();
},
),
GestureDetector(
@ -309,16 +312,14 @@ class _HomeWidgetState extends State<HomeWidget> {
},
),
);
setState(() {
});
timetableWidgetKey.currentState!.localFutureDo();
Setting.timetableWidgetKey!.currentState!.localFutureDo();
},
),
],
),
);
}),
body: TimetableWidget(key: timetableWidgetKey),
body: TimetableWidget(key: Setting.timetableWidgetKey!),
);
}

@ -7,9 +7,10 @@ import 'package:timemanagerapp/widgets/FreeTimetableWidget.dart';
import 'package:timemanagerapp/widgets/ManageUserTeamWidget.dart';
import '../entity/Team.dart';
import '../setting/Setting.dart';
class TeamWidget extends StatefulWidget {
const TeamWidget({Key? key}) : super(key: key);
const TeamWidget({required key}) : super(key: key);
@override
TeamWidgetState createState() => TeamWidgetState();
@ -42,6 +43,9 @@ class TeamWidgetState extends State<TeamWidget> {
@override
initState() {
super.initState();
Setting.freeTimetableWidgeKey = GlobalKey();
futureDo();
//todo: get teamList from database
}
@ -111,7 +115,7 @@ class TeamWidgetState extends State<TeamWidget> {
context,
MaterialPageRoute(
builder: (context) {
return FreeTimetableWidget(team: team);
return FreeTimetableWidget(team: team,key:Setting.freeTimetableWidgeKey!);
},
),
);
@ -155,7 +159,7 @@ class TeamWidgetState extends State<TeamWidget> {
builder: (context) {
return AddScheduleRoute(
scheduleType: "work",
teamId: 1,
teamId: team.id!
);
},
),
@ -239,7 +243,7 @@ class TeamWidgetState extends State<TeamWidget> {
context,
MaterialPageRoute(
builder: (context) {
return FreeTimetableWidget(team: team);
return FreeTimetableWidget(team: team,key:Setting.freeTimetableWidgeKey!);
},
),
);

@ -50,7 +50,6 @@ class _TestWidgetState extends State<TestWidget> {
late UserController userController;
late CourseController courseController;
late TaskController taskController;
late WorkController WwrkController;
@override
void initState() {
@ -269,7 +268,7 @@ class _TestWidgetState extends State<TestWidget> {
),
ElevatedButton(
onPressed: () {
WorkController().getWorks().then((works) {
TeamController().getWorks().then((works) {
showDialog(
context: context,
builder: (context) {
@ -293,47 +292,47 @@ class _TestWidgetState extends State<TestWidget> {
},
child: Text('显示团队任务列表'),
),
// ElevatedButton(
// onPressed: () {
// UserController()
// .login(User(username: 'root', password: 'root', role: 1))
// .then((resUser) {
// showDialog(
// context: context,
// builder: (context) {
// return AlertDialog(
// title: Text('登录信息'),
// content: SingleChildScrollView(
// child: Text(resUser!.toString())),
// );
// },
// );
// });
// },
// child: Text('登录'),
// ),
// ElevatedButton(
// onPressed: () {
// NetWorkController()
// .register(User(id: Setting.user!.getId!, username:'testReg' , password: '123', role: 0))
// .then((res) {
// showDialog(
// context: context,
// builder: (context) {
// return AlertDialog(
// title: Text('注册'),
// content: SingleChildScrollView(
// child: Text(res.toString())),
// );
// },
// );
// });
// },
// child: Text('注册'),
// ),
ElevatedButton(
onPressed: () {
UserController()
.login(User(username: 'root', password: 'root', role: 1))
.then((resUser) {
showDialog(
context: context,
builder: (context) {
return AlertDialog(
title: Text('登录信息'),
content: SingleChildScrollView(
child: Text(resUser!.toString())),
);
},
);
});
},
child: Text('登录'),
),
ElevatedButton(
onPressed: () {
NetWorkController()
.register(User(id: Setting.user!.getId!, username:'testReg' , password: '123', role: 0))
.then((res) {
showDialog(
context: context,
builder: (context) {
return AlertDialog(
title: Text('注册'),
content: SingleChildScrollView(
child: Text(res.toString())),
);
},
);
});
},
child: Text('注册'),
),
ElevatedButton(
onPressed: () {
TeamController().getMyTeamList().then((teamList) {
NetWorkController().getAllTeamList().then((teamList) {
showDialog(
context: context,
builder: (context) {
@ -355,46 +354,46 @@ class _TestWidgetState extends State<TestWidget> {
);
});
},
child: Text('显示团队列表'),
),
ElevatedButton(
onPressed: () {
TeamController()
.insertTeam(Team(leaderId: Setting.user!.getId!, teamName: "test3", maxNumber: 5))
.then((resTeam) {
showDialog(
context: context,
builder: (context) {
return AlertDialog(
title: Text(''),
content: SingleChildScrollView(
child: Text(resTeam.toString())),
);
},
);
});
},
child: Text('增加团队'),
),
ElevatedButton(
onPressed: () {
NetWorkController()
.deleteTeam(2)
.then((resTeam) {
showDialog(
context: context,
builder: (context) {
return AlertDialog(
title: Text(''),
content: SingleChildScrollView(
child: Text(resTeam.toString())),
);
},
);
});
},
child: Text('删除团队'),
child: Text('显示数据库所有团队列表(不可用)'),
),
// ElevatedButton(
// onPressed: () {
// TeamController()
// .insertTeam(Team(leaderId: Setting.user!.getId!, teamName: "test3", maxNumber: 5))
// .then((resTeam) {
// showDialog(
// context: context,
// builder: (context) {
// return AlertDialog(
// title: Text(''),
// content: SingleChildScrollView(
// child: Text(resTeam.toString())),
// );
// },
// );
// });
// },
// child: Text('增加团队'),
// ),
// ElevatedButton(
// onPressed: () {
// NetWorkController()
// .deleteTeam(2)
// .then((resTeam) {
// showDialog(
// context: context,
// builder: (context) {
// return AlertDialog(
// title: Text(''),
// content: SingleChildScrollView(
// child: Text(resTeam.toString())),
// );
// },
// );
// });
// },
// child: Text('删除团队'),
// ),
ElevatedButton(
onPressed: () {
NetWorkController()

@ -26,6 +26,8 @@ class TimetableWidget extends StatefulWidget {
}
class TimetableWidgetState extends State<TimetableWidget> {
late double deviceWidth;
int firstInit = 0;
@ -100,12 +102,15 @@ class TimetableWidgetState extends State<TimetableWidget> {
@override
initState() {
super.initState();
//
timeBlockWeekMap = {};
timeBlockList = [];
//
currentWeek = timetableWidgetController.getWeekCount();
currentWeek = TimetableWidgetController.getWeekCount();
showWeek = currentWeek;
// showWeek = 1;
//
@ -137,7 +142,7 @@ class TimetableWidgetState extends State<TimetableWidget> {
var mondayTime = timetableWidgetController.getmondayTime();
var mondayTime = TimetableWidgetController.getmondayTime();
//showMon
showMonth = mondayTime.add(Duration(days: 7 * (showWeek - currentWeek))).month;
@ -153,7 +158,7 @@ class TimetableWidgetState extends State<TimetableWidget> {
}
//
positions =
timetableWidgetController.convertTimeList(TimetableWidgetController.timePoints, deviceWidth);
TimetableWidgetController.convertTimeList(TimetableWidgetController.timePoints, deviceWidth);
}
@ -168,7 +173,7 @@ class TimetableWidgetState extends State<TimetableWidget> {
timeBlockWeekMap =
timetableWidgetController.transformTimeBlockMap(timeBlockList); //
var mondayTime = timetableWidgetController.getmondayTime();
var mondayTime = TimetableWidgetController.getmondayTime();
//showMon
showMonth = mondayTime.add(Duration(days: 7 * (showWeek - currentWeek))).month;
@ -182,24 +187,13 @@ class TimetableWidgetState extends State<TimetableWidget> {
}
//
positions =
timetableWidgetController.convertTimeList(TimetableWidgetController.timePoints, deviceWidth);
TimetableWidgetController.convertTimeList(TimetableWidgetController.timePoints, deviceWidth);
// print('Recent monday '+DateTime.now().day.toString());
}
@override
Widget build(BuildContext contexvoidt) {
// if (firstInit == 0) {
// //
// dataInitAfterFutherDo();
// firstInit = 1;
// } else {
// //
// updateAfterFutherDo();
// }
// print('dataCaculateAfterFutherDo');
// dataCaculateAfterFutherDo();
return Consumer<TimeProvider>(builder: (ctx, timePro, child) {
print('Rebuild timePro');
@ -501,7 +495,7 @@ class ShowTimeTextWidget extends StatelessWidget{
}
class BlockGestureWidget extends StatelessWidget {
const BlockGestureWidget({
BlockGestureWidget({
super.key,
required this.currentItem,
required this.blockGestureWidgetChilld,
@ -568,11 +562,12 @@ class BlockGestureWidget extends StatelessWidget {
mainAxisSize: MainAxisSize.min,
children: [
ElevatedButton(
onPressed: () {
onPressed: () async {
//
Navigator.of(context).pop();//
if (currentItem is Course) {
// AddCourseFormWidget
Navigator.push(
await Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
@ -580,9 +575,10 @@ class BlockGestureWidget extends StatelessWidget {
},
),
);
Setting.timetableWidgetKey!.currentState!.localFutureDo();
} else if (currentItem is Task) {
// AddTaskFormWidget
Navigator.push(
await Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
@ -590,16 +586,18 @@ class BlockGestureWidget extends StatelessWidget {
},
),
);
Setting.timetableWidgetKey!.currentState!.localFutureDo();
} else {
// AddWorkFormWidget
Navigator.push(
await Navigator.push(
context,
MaterialPageRoute(
MaterialPageRoute(
builder: (context) {
return AddScheduleRoute(exitSchedule:currentItem, scheduleType: 'work',teamId: (currentItem as Work).getTeamId);
},
),
);
Setting.timetableWidgetKey!.currentState!.localFutureDo();
}
},
child: Text('编辑'),
@ -612,18 +610,22 @@ class BlockGestureWidget extends StatelessWidget {
.deleteCourse((currentItem as Course).getCourseId).then((value){
// Provider.of<TimeProvider>(context, listen: false).updateTimetable(); //
// Navigator.of(context).pop()
Setting.timetableWidgetKey!.currentState!.localFutureDo();
});
} else if (currentItem is Task) {
TaskController().deleteTaskByTaskid(
(currentItem as Task).getTaskId).then((value){
Provider.of<TimeProvider>(context, listen: false).updateTimetable(); //
// Provider.of<TimeProvider>(context, listen: false).updateTimetable(); //
// Navigator.of(context).pop()
Setting.timetableWidgetKey!.currentState!.localFutureDo();
});
} else {
TeamController().deleteWorkByWorkId((currentItem as Work).getWorkId).then((value){
Provider.of<TimeProvider>(context, listen: false).updateTimetable(); //
// Provider.of<TimeProvider>(context, listen: false).updateTimetable(); //
// Navigator.of(context).pop()
Setting.timetableWidgetKey!.currentState!.localFutureDo();
Setting.timetableWidgetKey!.currentState!.serverFutureDo();
});
}
Navigator.of(context).pop();

@ -1,9 +1,16 @@
const configs = {
// mysql: {
// host: '118.195.213.51',
// port: '3306',
// user: 'root',
// password: '123456', // 自己设置的密码
// database: 'expressFrame' // 数据库的名字
// },
mysql: {
host: '118.195.213.51',
port: '3306',
host: '5902e9v900.zicp.fun',
port: '33006',
user: 'root',
password: '123456', // 自己设置的密码
password: 'mysql@2341', // 自己设置的密码
database: 'expressFrame' // 数据库的名字
},
// 打印错误

@ -205,6 +205,12 @@ const teamUserController = {
freeTimeMap[date] = [];
}
freeTimeMap[date] = freeTimeMap[date].concat(remainingFreeTime);
}else{
//插入一个0时长的空心闲时间,便于客户端知道考虑到这一天后还是没有空闲时间
if (!freeTimeMap[date]) {
freeTimeMap[date] = [];
}
freeTimeMap[date] = freeTimeMap[date].concat({startTime: date + 'T12:00:00.000', endTime: date+'T12:00:00.000'});
}
}
const freeTimeList = [];

@ -110,14 +110,15 @@ const courseController = {
console.log(term);
//定位到脚本的位置
const pythonScriptPath = path.join(__dirname,'..', '..', 'utils', 'getCourse', 'getSchedule.py');
// const pythonScriptPath = path.join(__dirname,'..', '..', 'utils', 'getCourse', 'getSchedule.py');
// const pythonScriptPath = '/usr/scripts/getCourse/getschedule.py';
const pythonScriptPath = '/usr/scripts/getCourse/getschedule.py';
console.log('pythonScriptPath : ' + pythonScriptPath);
//用子进程执行代码
const pythonProcess = spawn('python', [pythonScriptPath]);
// const pythonProcess = spawn('python', [pythonScriptPath]);
const pythonProcess = spawn('/usr/bin/python3', [pythonScriptPath]);
//输入部分
pythonProcess.stdin.write(info.userId + '\n');

Loading…
Cancel
Save