import 'package:flutter/material.dart'; import 'package:multi_select_flutter/dialog/multi_select_dialog_field.dart'; import 'package:multi_select_flutter/util/multi_select_item.dart'; import 'package:provider/provider.dart'; import 'package:timemanagerapp/controller/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); final Course? exitCourse; @override _AddCourseFormWidgetState createState() => _AddCourseFormWidgetState(exitCourse: exitCourse); } class _AddCourseFormWidgetState extends State { _AddCourseFormWidgetState({this.exitCourse}); late TextEditingController _courseController; late TextEditingController _creditController; late TextEditingController _noteController; late TextEditingController _startWeekController; late TextEditingController _endWeekController; late TextEditingController _startTimeController; late TextEditingController _endTimeController; late TextEditingController _teacherController; late TextEditingController _locationController; CourseController courseController = CourseController(); final GlobalKey _formKey = GlobalKey(); CourseForm courseForm = CourseForm(); Course? exitCourse; String course = ''; String credit = ''; String note = ''; String startWeek = ''; String endWeek = ''; String startTime = '1'; String endTime = '2'; String teacher = ''; String location = ''; List selectedDays = []; List> daysList = [ MultiSelectItem('周一', '一'), MultiSelectItem('周二', '二'), MultiSelectItem('周三', '三'), MultiSelectItem('周四', '四'), MultiSelectItem('周五', '五'), MultiSelectItem('周六', '六'), MultiSelectItem('周日', '日'), ]; final weekdayMap = { '周一': 1, '周二': 2, '周三': 3, '周四': 4, '周五': 5, '周六': 6, '周日': 7, }; @override void initState() { super.initState(); if(exitCourse != null){ course = exitCourse!.getName; credit = exitCourse!.getCredit.toString(); 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); _creditController = TextEditingController(text: credit); _noteController = TextEditingController(text: note); _startWeekController = TextEditingController(text: startWeek); _endWeekController = TextEditingController(text: endWeek); _startTimeController = TextEditingController(text: startTime); _endTimeController = TextEditingController(text: endTime); _teacherController = TextEditingController(text: teacher); _locationController = TextEditingController(text: location); } @override Widget build(BuildContext context) { return SingleChildScrollView( child: Padding( // 为了给表单添加内边距 padding: const EdgeInsets.all(16.0), // 四周添加16像素补白 child: Form( // 表单 key: _formKey, // 设置globalKey,用于后面获取FormState child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, // 水平方向占满 children: [ TextFormField( // 课程输入框 controller: _courseController, decoration: InputDecoration(labelText: '课程*'), // 输入框前面的提示文字 onSaved: (value) => course = value ?? '', // 当用户确定已经完成编辑时触发 validator: (value) { // 验证表单 if (value == null || value.isEmpty) { return '课程名为必填项'; } return null; }, ), SizedBox(height: 16.0),// 间隔 TextFormField( controller: _creditController, decoration: InputDecoration(labelText: '学分'), onSaved: (value) => credit = value ?? '', ), SizedBox(height: 16.0), TextFormField( controller: _noteController, decoration: InputDecoration(labelText: '备注'), onSaved: (value) => note = value ?? '', ), SizedBox(height: 16.0), MultiSelectDialogField( items: daysList, initialValue: selectedDays, // 设置初始选定的值 title: Text('上课日*'), validator: (values) { if (values == null || values.isEmpty) { return '上课日为必填项'; } return null; }, onConfirm: (values) { setState(() { selectedDays = values; }); }, ), SizedBox(height: 16.0), TextFormField( controller: _startWeekController, decoration: InputDecoration(labelText: '开始周'), onSaved: (value) => startWeek = value ?? '', validator: (value) { if (value == null || value.isEmpty) { return '开始周为必填项'; } return null; }, ), SizedBox(height: 16.0), TextFormField( controller: _endWeekController, decoration: InputDecoration(labelText: '结束周'), onSaved: (value) => endWeek = value ?? '', validator: (value) { if (value == null || value.isEmpty) { return '结束周为必填项'; } return null; }, ), SizedBox(height: 16.0), DropdownButtonFormField( // controller: _startTimeController, value: startTime, onChanged: (newValue) { setState(() { startTime = newValue ?? ''; }); }, items: List.generate(12, (index) => (index + 1).toString()) .map((time) => DropdownMenuItem( value: time, child: Text(time), )) .toList(), decoration: InputDecoration(labelText: '上课时间'), validator: (value) { if (value == null || value.isEmpty) { return '上课时间为必填项'; } return null; }, ), SizedBox(height: 16.0), DropdownButtonFormField( value: endTime, onChanged: (newValue) { setState(() { endTime = newValue ?? ''; }); }, items: List.generate(12, (index) => (index + 1).toString()) .map((time) => DropdownMenuItem( value: time, child: Text(time), )) .toList(), decoration: InputDecoration(labelText: '下课时间*'), validator: (value) { if (value == null || value.isEmpty) { return '下课时间为必填项'; } return null; }, ), SizedBox(height: 16.0), TextFormField( controller: _teacherController, decoration: InputDecoration(labelText: '老师'), onSaved: (value) => teacher = value ?? '', ), SizedBox(height: 16.0), TextFormField( controller: _locationController, decoration: InputDecoration(labelText: '地点'), onSaved: (value) => location = value ?? '', ), SizedBox(height: 24.0), Row( // 按钮组 mainAxisAlignment: MainAxisAlignment.spaceAround, // 水平方向均匀排列每个元素 children: [ ElevatedButton( onPressed: () { // 点击取消按钮后的操作 Navigator.pop(context); // 关闭当前界面 }, child: Text('取消'), ), ElevatedButton( onPressed: () { // 点击确定按钮后的操作 if (_formKey.currentState!.validate()) { _formKey.currentState!.save(); // 在这里执行表单提交操作 courseForm.course = course; courseForm.credit = double.parse(credit); courseForm.note = note; courseForm.location = location; courseForm.selectedDays = selectedDays.map((e) => weekdayMap[e]!).toList(); courseForm.startWeek = int.parse(startWeek); courseForm.endWeek = int.parse(endWeek); courseForm.startTime = int.parse(startTime); courseForm.endTime = int.parse(endTime); courseForm.teacher = teacher; if(exitCourse != null){//先删除再添加 courseController.deleteCourse(exitCourse!.getCourseId).then((value){ courseController.addCourseForm(courseForm).then(((value){ // 关闭当前界面 // Provider.of(context, listen: false).updateTimetable(); // 更新菜单栏页面操作 // timePro.updatTimtTablecount = 100; Navigator.pop(context); })); }); }else{ courseController.addCourseForm(courseForm).then(((value){ // 关闭当前界面 // Provider.of(context, listen: false).updateTimetable(); // 更新菜单栏页面操作 // timePro.updatTimtTablecount = 100; Navigator.pop(context); })); } }; }, child: Text('确定'), ), ], ), ], ), ), ), ); } }