team页面基本完成,登录注册功能基本完成,添加个人计划页面完成

zhangrenshu
LRC 2 years ago
parent 6821622f48
commit bd8ea17214

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

@ -54,12 +54,11 @@ class CourseController {
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,
courseId: await idGenerator.generateId(),
teacher: courseForm.getTeacher(),
location: courseForm.getLocation(),
start: startDate,

@ -37,70 +37,36 @@ class TaskController {
//addscheduleForm
Future<void> addScheduleForm(ScheduleForm scheduleForm) async {
List<Task> taskListToInsert = [];
// 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: int.parse(raspiyane[scheduleForm.getStartTime() - 1][0].split(':')[0]),
// minutes: int.parse(raspiyane[scheduleForm.getStartTime() - 1][0].split(':')[1]),
// ));
//
// final endDate = termstartdate.add(Duration(
// days: (7 * (week - 1) + day! - 1),
// hours: int.parse(raspiyane[scheduleForm.getEndTime() - 1][1].split(':')[0]),
// minutes: int.parse(raspiyane[scheduleForm.getEndTime() - 1][1].split(':')[1]),
// ));
// int taskId = await idGenerator.generateId();
// Task task = Task(
// id:await idGenerator.generateId(),
// name: scheduleForm.getTask(),
// userId: Setting.user!.getId!,
// content: scheduleForm.getContent(),
// taskId: taskId,
// startTime: startDate,
// endTime: endDate,
// );
// taskListToInsert.add(task);
// }
await insertTaskList(taskListToInsert);
}
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,
));
int taskId = await idGenerator.generateId();
Task task = Task(
id: await idGenerator.generateId(),
name: scheduleForm.getName,
userId: Setting.user!.getId!,
content: scheduleForm.getContent,
taskId: await idGenerator.generateId(),
startTime: startDate,
endTime: endDate,
);
taskListToInsert.add(task);
}
await insertTaskList(taskListToInsert);
}
}
// 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<int> insertTask(Task task) async {
return await TaskDao().insertTask(task);

@ -5,6 +5,8 @@ import '../entity/Work.dart';
import 'package:timemanagerapp/database/dao/TeamDao.dart';
import 'package:timemanagerapp/database/dao/WorkDao.dart';
import '../setting/Setting.dart';
class TeamController {
late int leaderid;
List<Team> teamList = []; //teamList
@ -12,8 +14,8 @@ class TeamController {
NetWorkController netWorkController = NetWorkController();
TeamController(int leaderid) {
this.leaderid = leaderid;
TeamController() { //leaderidid
this.leaderid = Setting.user!.getId!;
//TODO: leaderidteamList
for (var team in teamList) {

@ -3,6 +3,7 @@ import 'package:timemanagerapp/database/MyDatebase.dart';
import 'package:timemanagerapp/entity/User.dart';
import '../setting/Setting.dart';
import '../util/dataUtil.dart';
import 'NetWorkController.dart';
/**
@ -10,6 +11,7 @@ import 'NetWorkController.dart';
*/
class UserController {
NetWorkController netWorkController = NetWorkController();
IdGenerator idGenerator = IdGenerator();
//
static UserController getInstance() {
@ -21,16 +23,30 @@ class UserController {
}
Future<bool> login(User user) async {
int userid = await netWorkController.login(user);
//todo:
// int userid = await netWorkController.login(user);
//
int userid = Setting.user!.getId!;
if(userid == -1){
return false;
}
user.id = userid;
await Setting.saveUser(user);
return true;
}
Future<bool> register(User user) async {
int userid = await netWorkController.register(user);
//todo:
// int userid = await netWorkController.login(user);
//
int userid = await idGenerator.generateId();
print("userid生成:"+userid.toString());
if(userid == -1){
return false;
}
user.id = userid;
await Setting.saveUser(user);
//todo:
return true;
}

@ -0,0 +1,104 @@
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 {
IdGenerator idGenerator = IdGenerator();
List<Work> WorkList = []; //courseList
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']),
// );
// Works.add(Work);
// }
// WorkList = Works; // Work
return WorkList;
}
//addscheduleForm
Future<void> addScheduleForm(ScheduleForm scheduleForm,int teamId) async {
List<Work> WorkListToInsert = [];
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(),
workId: await idGenerator.generateId(),
userId: Setting.user!.getId!,
status: "未完成",
workContent: scheduleForm.getContent,
teamId: teamId,
functionaryId: 0, //???
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;
}
//
// //delete
// 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);
// }
}

@ -32,7 +32,7 @@ class UserDao {
//!!!
await txn.rawInsert('''
INSERT INTO users(teamId,username,password,role)
VALUES(${user.teamId},"${user.username}","${user.password}",${user.role})
VALUES("${user.username}","${user.password}",${user.role})
''');
});
}

@ -1,13 +1,11 @@
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,
@ -16,7 +14,6 @@ class User {
Map<String, dynamic> toMap() {
return {
'teamId': teamId,
'username': "$username",
'password': "$password",
'role': role,
@ -26,8 +23,6 @@ class User {
// Getter methods
int? get getId => id;
int get getTeamId => teamId;
String get getUsername => username;
String get getPassword => password;
@ -39,9 +34,6 @@ class User {
id = newId;
}
set setTeamId(int newTeamId) {
teamId = newTeamId;
}
set setUsername(String newUsername) {
username = newUsername;
@ -56,26 +48,25 @@ class User {
}
// 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,
);
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, teamId:$teamId, username: $username, password: $password, role: $role)';
return 'User(id: $id, username: $username, password: $password, role: $role)';
}
}

@ -1,13 +1,13 @@
class Work {
int? id;
int userId;
String status;
String workContent;
int teamId;
int functionaryId;
int workId;
DateTime endTime;
DateTime startTime;
late int? id;
late int userId;
late String status;
late String workContent;
late int teamId;
late int functionaryId;
late int workId;
late DateTime endTime;
late DateTime startTime;
Work({
this.id,

@ -3,9 +3,10 @@ import 'package:flutter/material.dart';
import 'package:timemanagerapp/widgets/AddScheduleFormWidget.dart';
class AddScheduleRoute extends StatelessWidget {
const AddScheduleRoute({Key? key,required this.scheduleType}) : super(key: key);
const AddScheduleRoute({Key? key,required this.scheduleType,this.teamId}) : super(key: key);
final String scheduleType;//taskwork
final int? teamId ;
@override
Widget build(BuildContext context) {
@ -13,7 +14,7 @@ class AddScheduleRoute extends StatelessWidget {
appBar: AppBar(
title: Text('添加自定义个人计划'),
),
body: AddScheduleFormWidget(scheduleType: scheduleType,),
body: AddScheduleFormWidget(scheduleType: scheduleType,teamId: teamId),
);
}
}

@ -0,0 +1,17 @@
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(),
);
}
}

@ -0,0 +1,17 @@
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(),
);
}
}

@ -0,0 +1,44 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import '../setting/Setting.dart';
import '../widgets/AddTeamWidget.dart';
import '../widgets/TeamWidgt.dart';
class TeamRoute extends StatelessWidget {
@override
Widget build(BuildContext context) {
if(Setting.user!.getId == -1){
return Scaffold(
appBar: AppBar(
title: Text('我的团队'),
),
body: Center(
child: Text('请先登录'),
),
);
}
else {
return Scaffold(
appBar: AppBar(
title: Text('我的团队'),
),
body: TeamWidget(),
floatingActionButton: FloatingActionButton(
onPressed: () async {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
return AddTeamWidget();
},
),
);
},
child: Icon(Icons.add),
),
);
}
}
}

@ -1,17 +0,0 @@
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(),
);
}
}

@ -9,6 +9,7 @@ class Setting {
static DateTime startdate_init = DateTime(2023, 8, 28);
static late DateTime startdate;
static late User? user;
static User nullUser = User(id:-1, username: "null", password: "null", role: 0);
static double pixelToMinuteRatio_ratio = 1;
static late double deviceWidth ;
@ -44,14 +45,17 @@ class Setting {
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);
user = nullUser;
return nullUser;
} else {
return User.parseString(res);
user = User.parseString(res);
return user;
}
}
static saveUser(User user) {
static saveUser(User newuser) {
//
prefs?.setString("user", user.toString());
user = newuser;
prefs?.setString("user", newuser.toString());
}
}

@ -2,20 +2,28 @@ import 'package:flutter/material.dart';
import 'package:multi_select_flutter/dialog/multi_select_dialog_field.dart';
import 'package:multi_select_flutter/util/multi_select_item.dart';
import 'package:timemanagerapp/controller/TaskController.dart';
import 'package:timemanagerapp/controller/WorkController.dart';
import 'package:timemanagerapp/entity/ScheduleForm.dart';
import 'package:timemanagerapp/entity/Task.dart';
class AddScheduleFormWidget extends StatefulWidget {
const AddScheduleFormWidget({Key? key,required this.scheduleType}) : super(key: key);
const AddScheduleFormWidget({Key? key,required this.scheduleType,this.teamId}) : super(key: key);
final String scheduleType;//taskwork
final int? teamId ;
@override
_AddScheduleFormWidgetState createState() => _AddScheduleFormWidgetState();
_AddScheduleFormWidgetState createState() => _AddScheduleFormWidgetState(scheduleType:scheduleType ,teamId:teamId);
}
class _AddScheduleFormWidgetState extends State<AddScheduleFormWidget> {
_AddScheduleFormWidgetState({required this.scheduleType,this.teamId});
final String scheduleType;//taskwork
final int? teamId ;
TaskController taskController = TaskController();
WorkController workController = WorkController();
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
ScheduleForm scheduleForm = ScheduleForm();
//ScheduleForm
@ -194,7 +202,11 @@ class _AddScheduleFormWidgetState extends State<AddScheduleFormWidget> {
scheduleForm.endWeek = int.parse(endWeek);
scheduleForm.startTime = startTime;
scheduleForm.endTime = endTime;
taskController.addScheduleForm(scheduleForm).then((value) => Navigator.pop(context)); //
if(scheduleType == "task") {
taskController.addScheduleForm(scheduleForm).then((value) => Navigator.pop(context)); //
}else{
workController.addScheduleForm(scheduleForm,teamId!).then((value) => Navigator.pop(context)); //
}
}
},

@ -0,0 +1,45 @@
import 'package:flutter/material.dart';
class AddTeamWidget extends StatelessWidget {
TextEditingController teamNameController = TextEditingController();
TextEditingController teamDescriptionController = TextEditingController();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('创建团队'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
children: [
TextField(
controller: teamNameController,
decoration: InputDecoration(
labelText: '团队名称',
),
),
SizedBox(height: 10),
TextField(
controller: teamDescriptionController,
decoration: InputDecoration(
labelText: '团队描述',
),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () {
String teamName = teamNameController.text;
String teamDescription = teamDescriptionController.text;
//todo
Navigator.pop(context);
},
child: Text('确定'),
),
],
),
),
);
}
}

@ -3,11 +3,15 @@ import 'package:timemanagerapp/controller/CourseController.dart';
import 'package:timemanagerapp/controller/UserController.dart';
import 'package:timemanagerapp/database/MyDatebase.dart';
import 'package:timemanagerapp/ruters/AddScheduleRoute.dart';
import 'package:timemanagerapp/ruters/TeamRoute.dart';
import 'package:timemanagerapp/ruters/TestRoute.dart';
import 'package:timemanagerapp/widgets/RegisterWidget.dart';
import 'package:timemanagerapp/widgets/TimetableWidget.dart';
import '../ruters/AddCourseRoute.dart';
import '../ruters/UserSettingRoute.dart';
import '../setting/Setting.dart';
import 'LoginWidget.dart';
class HomeWidget extends StatefulWidget {
const HomeWidget({Key? key}) : super(key: key);
@ -21,11 +25,11 @@ class _HomeWidgetState extends State<HomeWidget> {
late UserController userController;
late CourseController courseController;
bool isLoggedIn = false; //
@override
void initState() {
super.initState();
MyDatabase.initDatabase();
userController = UserController.getInstance();
courseController = CourseController.getInstance();
}
@ -109,7 +113,7 @@ class _HomeWidgetState extends State<HomeWidget> {
),
);
},
child: Text('添加任务'),
child: Text('添加个人计划'),
),
const SizedBox(height: 10),
],
@ -133,7 +137,7 @@ class _HomeWidgetState extends State<HomeWidget> {
MaterialPageRoute(
builder: (context) {
//todo
return Container();
return TeamRoute();
},
),
);
@ -155,9 +159,54 @@ class _HomeWidgetState extends State<HomeWidget> {
child: Column(
children: [
UserAccountsDrawerHeader(
//todo ,,
accountName: Text('Username'),
accountEmail: Text('user@example.com'),
accountName: GestureDetector(
onTap: () {
if (Setting.user!.getId! == -1) {
//
Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
return LoginWidget(); //
},
),
);
}else{
//退
Setting.saveUser(Setting.nullUser);
setState(() {
});
}
},
child: Setting.user!.getId! != -1 ? Text(Setting.user!.getUsername!) : Text('未登录'),
),
accountEmail: GestureDetector( //
onTap: () {
if (Setting.user!.getId! == -1) {
//
Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
return LoginWidget(); //
},
),
);
}else{
//退
Setting.saveUser(Setting.nullUser);
setState(() {
});
}
},
child: Setting.user!.getId! != -1
? Text('退出登录')
: SizedBox(), //
),
currentAccountPicture: CircleAvatar(
backgroundImage: AssetImage(
'assets/images/userphoto.jpg'), //
),
),
ListTile(
title: Text('用户设置'),
@ -175,7 +224,7 @@ class _HomeWidgetState extends State<HomeWidget> {
},
),
ListTile(
title: Text('登录'),
title: Text('注册'),
onTap: () {
//todo
// UserSettingWight
@ -183,18 +232,12 @@ class _HomeWidgetState extends State<HomeWidget> {
context,
MaterialPageRoute(
builder: (context) {
return UserSettingRoute();
return RegisterWidget();
},
),
);
},
),
ListTile(
title: Text('退出登录'),
onTap: () {
//todo action
},
),
ListTile(
title: Text('开发者测试'),
onTap: () {

@ -1,6 +1,31 @@
import 'package:flutter/material.dart';
import 'package:timemanagerapp/controller/UserController.dart';
import '../entity/User.dart';
class LoginWidget extends StatefulWidget {
@override
_LoginWidgetState createState() => _LoginWidgetState();
}
class _LoginWidgetState extends State<LoginWidget> {
final UserController userController = UserController.getInstance();
final TextEditingController usernameController = TextEditingController();
final TextEditingController passwordController = TextEditingController();
Future<void> handleLogin() async {
String username = usernameController.text;
String password = passwordController.text;
bool res = await userController.login(User(username: username, password: password, role: 0));
if(res) {
Navigator.pop(context);
}else{
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('用户名或密码错误'))
);
}
}
class LoginWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
@ -14,12 +39,14 @@ class LoginWidget extends StatelessWidget {
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
TextFormField(
controller: usernameController,
decoration: InputDecoration(
labelText: '用户名',
),
),
SizedBox(height: 16.0),
TextFormField(
controller: passwordController,
obscureText: true, //
decoration: InputDecoration(
labelText: '密码',
@ -27,10 +54,7 @@ class LoginWidget extends StatelessWidget {
),
SizedBox(height: 24.0),
ElevatedButton(
onPressed: () {
//
//
},
onPressed: handleLogin,
child: Text('登录'),
),
],

@ -0,0 +1,61 @@
import 'package:flutter/material.dart';
class ManageUserTeamWidget extends StatefulWidget {
const ManageUserTeamWidget({Key? key}) : super(key: key);
@override
_AddTeamWidgetState createState() => _AddTeamWidgetState();
}
class _AddTeamWidgetState extends State<ManageUserTeamWidget> {
TextEditingController memberIdController = TextEditingController();
void handleInviteButton() {
String memberId = memberIdController.text;
//
//
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text('成功发送邀请'),
content: Text('已成功发送邀请给成员ID: $memberId'),
actions: [
TextButton(
child: Text('确定'),
onPressed: () {
Navigator.of(context).pop(); //
},
),
],
);
},
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('添加团队成员'),
),
body: Padding(
padding: EdgeInsets.all(16.0),
child: Column(
children: [
TextField(
controller: memberIdController,
decoration: InputDecoration(labelText: '成员ID'),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: handleInviteButton,
child: Text('邀请'),
),
],
),
),
);
}
}

@ -1,6 +1,35 @@
import 'package:flutter/material.dart';
import 'package:timemanagerapp/controller/UserController.dart';
import '../entity/User.dart';
class RegisterWidget extends StatefulWidget {
@override
_RegisterWidgetState createState() => _RegisterWidgetState();
}
class _RegisterWidgetState extends State<RegisterWidget> {
UserController userController = UserController.getInstance();
final TextEditingController usernameController = TextEditingController();
final TextEditingController passwordController = TextEditingController();
final TextEditingController confirmPasswordController = TextEditingController();
void handleRegister() {
String username = usernameController.text;
String password = passwordController.text;
String confirmPassword = confirmPasswordController.text;
if (password != confirmPassword) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('两次输入的密码不一致'))
);
return;
}else{
userController.register(User(username:username, password:password, role:0)).then((value) => Navigator.pop(context));
}
}
class RegisterWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
@ -14,30 +43,30 @@ class RegisterWidget extends StatelessWidget {
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
TextFormField(
controller: usernameController,
decoration: InputDecoration(
labelText: '用户名',
),
),
SizedBox(height: 16.0),
TextFormField(
obscureText: true, //
controller: passwordController,
obscureText: true,
decoration: InputDecoration(
labelText: '密码',
),
),
SizedBox(height: 16.0),
TextFormField(
obscureText: true, //
controller: confirmPasswordController,
obscureText: true,
decoration: InputDecoration(
labelText: '确认密码',
),
),
SizedBox(height: 24.0),
ElevatedButton(
onPressed: () {
//
//
},
onPressed: handleRegister,
child: Text('注册'),
),
],

@ -0,0 +1,89 @@
import 'package:flutter/material.dart';
import 'package:timemanagerapp/controller/TeamController.dart';
import 'package:timemanagerapp/ruters/AddScheduleRoute.dart';
import 'package:timemanagerapp/ruters/AddTeamRoute.dart';
import 'package:timemanagerapp/widgets/AddScheduleFormWidget.dart';
import 'package:timemanagerapp/widgets/AddTeamWidget.dart';
import 'package:flutter/material.dart';
import 'package:timemanagerapp/widgets/AddTeamWidget.dart';
import 'package:timemanagerapp/widgets/ManageUserTeamWidget.dart';
import '../entity/Team.dart';
class TeamWidget extends StatefulWidget {
const TeamWidget({Key? key}) : super(key: key);
@override
_TeamWidgetState createState() => _TeamWidgetState();
}
class _TeamWidgetState extends State<TeamWidget> {
List<Team> teamList = [
Team(teamName: 'Team 1', leaderId: 1, maxNumber: 10),
Team(teamName: 'Team 2', leaderId: 1, maxNumber: 10),
Team(teamName: 'Team 3', leaderId: 1, maxNumber: 10)
];
TeamController teamController = TeamController();
@override
initState(){
super.initState();
//todo: get teamList from database
}
@override
Widget build(BuildContext context) {
return Center(
child: ListView.builder(
itemCount: teamList.length,
itemBuilder: (BuildContext context, int index) {
Team team = teamList[index];
return Column(
children: [
ListTile(
leading: Icon(Icons.group), // icon
title: Text(team.teamName), //
trailing: Row(
mainAxisSize: MainAxisSize.min,
children: [
IconButton(
icon: Icon(Icons.person_add), //
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
return ManageUserTeamWidget();
},
),
);
},
),
IconButton(
icon: Icon(Icons.assignment), //
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
return AddScheduleRoute(
scheduleType: "work",
teamId: 1,
);
},
),
);
},
),
],
),
),
],
);
},
),
);
}
}

@ -28,7 +28,6 @@ import 'package:timemanagerapp/entity/Course.dart';
import 'package:timemanagerapp/entity/User.dart';
import 'package:timemanagerapp/database/MyDatebase.dart';
import '../ruters/TimetableRoute.dart';
class TestWidget extends StatefulWidget {
const TestWidget({Key? key}) : super(key: key);
@ -62,7 +61,7 @@ class _TestWidgetState extends State<TestWidget> {
),
ElevatedButton(
onPressed: () => userController.insertUser(User(
teamId: 3231, username: "测试用户", password: "23243", role: 1)),
username: "测试用户", password: "23243", role: 1)),
child: Text('插入一个测试用户'),
),
ElevatedButton(
@ -138,20 +137,6 @@ class _TestWidgetState extends State<TestWidget> {
},
child: Text('显示课程列表'),
),
ElevatedButton(
onPressed: () {
// AddCourseFormWidget
Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
return TimetableRoute();
},
),
);
},
child: Text('查看时间表'),
),
AddCourseButton(onCourseAdded: (jsonstr) {
// addCourse()
courseController.test_autoImportCours(jsonstr);

@ -69,6 +69,7 @@ flutter:
assets:
- assets/pythoncode/zfn_api.py
- assets/pythoncode/getschedule.py
- assets/images/userphoto.jpg
# To add assets to your application, add an assets section, like this:
# assets:

Loading…
Cancel
Save