diff --git a/src/timemanagerapp/android/app/build.gradle b/src/timemanagerapp/android/app/build.gradle
index d6f4833..c161838 100644
--- a/src/timemanagerapp/android/app/build.gradle
+++ b/src/timemanagerapp/android/app/build.gradle
@@ -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
}
}
}
diff --git a/src/timemanagerapp/android/app/src/debug/AndroidManifest.xml b/src/timemanagerapp/android/app/src/debug/AndroidManifest.xml
index 399f698..49fdd92 100644
--- a/src/timemanagerapp/android/app/src/debug/AndroidManifest.xml
+++ b/src/timemanagerapp/android/app/src/debug/AndroidManifest.xml
@@ -4,4 +4,9 @@
to allow setting breakpoints, to provide hot reload, etc.
-->
+
+
+
+
+
diff --git a/src/timemanagerapp/android/app/src/main/AndroidManifest.xml b/src/timemanagerapp/android/app/src/main/AndroidManifest.xml
index f6f59e2..5b32bfa 100644
--- a/src/timemanagerapp/android/app/src/main/AndroidManifest.xml
+++ b/src/timemanagerapp/android/app/src/main/AndroidManifest.xml
@@ -1,8 +1,10 @@
+
+ android:usesCleartextTraffic="true" //http
+
+
+
+
+
+
diff --git a/src/timemanagerapp/android/app/src/profile/AndroidManifest.xml b/src/timemanagerapp/android/app/src/profile/AndroidManifest.xml
index 399f698..49fdd92 100644
--- a/src/timemanagerapp/android/app/src/profile/AndroidManifest.xml
+++ b/src/timemanagerapp/android/app/src/profile/AndroidManifest.xml
@@ -4,4 +4,9 @@
to allow setting breakpoints, to provide hot reload, etc.
-->
+
+
+
+
+
diff --git a/src/timemanagerapp/lib/controller/NetWorkController.dart b/src/timemanagerapp/lib/controller/NetWorkController.dart
index b4607b5..308081a 100644
--- a/src/timemanagerapp/lib/controller/NetWorkController.dart
+++ b/src/timemanagerapp/lib/controller/NetWorkController.dart
@@ -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?> getAllTeamList(int userId) async {
+ Future?> getAllTeamListByUserId(int userId) async {
final response = await http.get(
Uri.parse(baseUrl + 'get_team').replace(queryParameters: {'userId': userId.toString()}),
headers: {
@@ -128,10 +131,32 @@ class NetWorkController {
.toList();
return teamList;
} else {
+ print("获取All团队列表ByUserId失败");
return null;
}
}
+ Future> getAllTeamList() async {
+ final response = await http.get(
+ Uri.parse(baseUrl + 'get_team'),
+ headers: {
+ 'Content-Type': 'application/json; charset=UTF-8',
+ },
+
+ );
+
+ final jsonResponse = json.decode(response.body);
+ if (jsonResponse['code'] == 200) {
+ List teamList = (jsonResponse['data'] as List)
+ .map((team) => Team.fromJson(team as Map))
+ .toList();
+ return teamList;
+ } else {
+ print("获取All团队列表失败");
+ return [];
+ }
+ }
+
Future 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?> 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: {
+ 'Content-Type': 'application/json; charset=UTF-8',
+ },
+ );
+
+ final jsonResponse = json.decode(response.body);
+ if (jsonResponse['code'] == 200) {
+ List teamWorkList = (jsonResponse['data'] as List)
+ .map((work) => Work.fromJson(work as Map))
+ .toList();
+ return teamWorkList;
+ } else {
+ return null;
+ }
+ }
+
+ //获取服务器所有work
+ Future?> getALlTeamWorkList() async {
+ final response = await http.get(
+ Uri.parse(baseUrl + 'get_work'),
headers: {
'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;
}
}
diff --git a/src/timemanagerapp/lib/controller/TeamController.dart b/src/timemanagerapp/lib/controller/TeamController.dart
index 75a42c2..29c41bb 100644
--- a/src/timemanagerapp/lib/controller/TeamController.dart
+++ b/src/timemanagerapp/lib/controller/TeamController.dart
@@ -66,7 +66,7 @@ class TeamController {
//参考模板
joindedTeamList = [];
allTeamList = [];
- List? res = await netWorkController.getAllTeamList(Setting.user!.getId!);
+ List? 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);
diff --git a/src/timemanagerapp/lib/controller/TimetableWidgetController.dart b/src/timemanagerapp/lib/controller/TimetableWidgetController.dart
index 40ccbac..74162e7 100644
--- a/src/timemanagerapp/lib/controller/TimetableWidgetController.dart
+++ b/src/timemanagerapp/lib/controller/TimetableWidgetController.dart
@@ -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 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 timePoints = [
DateTime(2023, 9, 22, 7, 00),
@@ -41,7 +41,7 @@ class TimetableWidgetController {
}
//时间转换为时间轴的piexl值的函数
- List convertTimeList(List timePoints, double deviceWidth) {
+ static List convertTimeList(List timePoints, double deviceWidth) {
List 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 repairFreeTimeBlockList(List freeTimeBlockList) {
+ List repairedFreeTimeBlockList = [];
+ DateTime termStartDate = Setting.startdate;
+ DateTime termEndDate = termStartDate.add(Duration(days: 7 * Setting.termAllWeekCout));
+ //设置termEndDate的时分秒为23:00:00
+ termEndDate = DateTime(termEndDate.year, termEndDate.month, termEndDate.day, 23, 00, 00);
+
+ Set 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 getSelectDayList(DateTime date) {
+ List selectedDayList = [];
+ //根据data是星期几就selectedDayList添加几个元素
+ 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 transformTimeBlockMap(List blockList) {
Map timeblockMap = {};
for (var timeBlock in blockList) {
diff --git a/src/timemanagerapp/lib/controller/UserController.dart b/src/timemanagerapp/lib/controller/UserController.dart
index 005c433..0b98d87 100644
--- a/src/timemanagerapp/lib/controller/UserController.dart
+++ b/src/timemanagerapp/lib/controller/UserController.dart
@@ -71,6 +71,22 @@ class UserController {
return true;
}
+ // //注销
+ // Future 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 insertUser(User user) async {
diff --git a/src/timemanagerapp/lib/controller/WorkController.dart b/src/timemanagerapp/lib/controller/WorkController.dart
index 915aab5..091ecf1 100644
--- a/src/timemanagerapp/lib/controller/WorkController.dart
+++ b/src/timemanagerapp/lib/controller/WorkController.dart
@@ -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 WorkList = []; //实时维护的courseList缓存
- static NetWorkController netWorkController = NetWorkController();
-
- DateTime termstartdate = Setting.startdate; //Setting.getStartDate();
-
- Future> getWorks() async {
- //todo http获取
- List