频繁刷新卡顿优化,同步完成

develop
LRC 2 years ago
parent 91923e2158
commit b65c9fa3b4

@ -15,27 +15,6 @@ class NetWorkController {
// String baseUrl = "http://5902e9v900.zicp.fun:30002/";
// String baseUrl = "http://5902e9v900.zicp.fun:3000/";
//getLIst
// Future<List<Team>?> getTeamList(int leaderId) async {
// final response = await http.get(
// Uri.parse(baseUrl + 'get_team').replace(queryParameters: {'leaderId': leaderId.toString()}),
// headers: <String, String>{
// 'Content-Type': 'application/json; charset=UTF-8',
// },
//
// );
//
// final jsonResponse = json.decode(response.body);
// if (jsonResponse['code'] == 200) {
// List<Team> teamList = (jsonResponse['data'] as List)
// .map((team) => Team.fromJson(team as Map<String, dynamic>))
// .toList();
// return teamList;
// } else {
// return null;
// }
// }
//--------------------------------------------------
//getUserList
Future<List<User>?> getUserList() async {
@ -176,7 +155,7 @@ class NetWorkController {
'Content-Type': 'application/json; charset=UTF-8',
},
body: JsonEncoder().convert({
'teamId': teamId,
'teamId':teamId,
}),
);
@ -184,6 +163,7 @@ class NetWorkController {
if (jsonResponse['code'] == 200) {
return true;
} else {
print("delete team 失败:" + jsonResponse['data'].toString());
return false;
}
}
@ -303,6 +283,8 @@ class NetWorkController {
if (jsonResponse['code'] == 200) {
return true;
} else {
print("TeamWork插入失败");
print("body:"+ workList.map((work) => work.toMap()).toList().toString());
return false;
}
}

@ -3,9 +3,11 @@ import 'package:flutter/material.dart';
import '../setting/Setting.dart';
import '../widgets/AddTeamWidget.dart';
import '../widgets/TeamWidgt.dart';
import '../widgets/TeamWidget.dart';
class TeamRoute extends StatelessWidget {
//TeamWidgetKey
GlobalKey<TeamWidgetState> teamWidgetKey = GlobalKey();
@override
Widget build(BuildContext context) {
@ -27,14 +29,15 @@ class TeamRoute extends StatelessWidget {
body: TeamWidget(),
floatingActionButton: FloatingActionButton(
onPressed: () async {
Navigator.push(
await Navigator.push(
context,
MaterialPageRoute(
MaterialPageRoute(
builder: (context) {
return AddTeamWidget();
},
),
);
teamWidgetKey.currentState!.futureDo();
},
child: Icon(Icons.add),
),

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

@ -226,11 +226,7 @@ class _AddCourseFormWidgetState extends State<AddCourseFormWidget> {
},
child: Text('取消'),
),
Selector<TimeProvider, TimeProvider>( // time
selector: (ctx, provider) => provider,
shouldRebuild: (pre, next) => false,
builder: (ctx, timePro, child) {
return ElevatedButton(
ElevatedButton(
onPressed: () {
//
if (_formKey.currentState!.validate()) {
@ -250,7 +246,7 @@ class _AddCourseFormWidgetState extends State<AddCourseFormWidget> {
courseController.deleteCourse(exitCourse!.getCourseId).then((value){
courseController.addCourseForm(courseForm).then(((value){
//
timePro.updateTimetable();
// Provider.of<TimeProvider>(context, listen: false).updateTimetable(); //
// timePro.updatTimtTablecount = 100;
Navigator.pop(context);
@ -259,19 +255,15 @@ class _AddCourseFormWidgetState extends State<AddCourseFormWidget> {
}else{
courseController.addCourseForm(courseForm).then(((value){
//
timePro.updateTimetable();
// Provider.of<TimeProvider>(context, listen: false).updateTimetable(); //
// timePro.updatTimtTablecount = 100;
Navigator.pop(context);
}));
}
};
},
child: Text('确定'),
);
},
// child: Icon(Icons.add),
),
),
],
),
],

@ -213,11 +213,7 @@ class _AddScheduleFormWidgetState extends State<AddScheduleFormWidget> {
},
child: Text('取消'),
),
Selector<TimeProvider, TimeProvider>( // time
selector: (ctx, provider) => provider,
shouldRebuild: (pre, next) => false,
builder: (ctx, timePro, child) {
return ElevatedButton(
ElevatedButton(
onPressed: () {
//
if (_formKey.currentState!.validate()) {
@ -236,7 +232,7 @@ class _AddScheduleFormWidgetState extends State<AddScheduleFormWidget> {
taskController.addScheduleForm(scheduleForm).then(((value){
Provider.of<TimeProvider>(context, listen: false).updateTimetable(); //
//
timePro.updateTimetable();
// Provider.of<TimeProvider>(context, listen: false).updateTimetable(); //
// timePro.updatTimtTablecount++;
Navigator.pop(context);
}));
@ -245,7 +241,7 @@ class _AddScheduleFormWidgetState extends State<AddScheduleFormWidget> {
taskController.addScheduleForm(scheduleForm).then(((value){
Provider.of<TimeProvider>(context, listen: false).updateTimetable(); //
//
timePro.updateTimetable();
// Provider.of<TimeProvider>(context, listen: false).updateTimetable(); //
// timePro.updatTimtTablecount++;
Navigator.pop(context);
}));
@ -256,7 +252,7 @@ class _AddScheduleFormWidgetState extends State<AddScheduleFormWidget> {
teamController.addScheduleForm(scheduleForm,teamId!).then(((value){
Provider.of<TimeProvider>(context, listen: false).updateTimetable(); //
//
timePro.updateTimetable();
// Provider.of<TimeProvider>(context, listen: false).updateTimetable(); //
// timePro.updatTimtTablecount++;
Navigator.pop(context);
}));
@ -265,7 +261,6 @@ class _AddScheduleFormWidgetState extends State<AddScheduleFormWidget> {
teamController.addScheduleForm(scheduleForm,teamId!).then(((value){
Provider.of<TimeProvider>(context, listen: false).updateTimetable(); //
//
timePro.updateTimetable();
// timePro.updatTimtTablecount++;
Navigator.pop(context);
}));
@ -274,9 +269,7 @@ class _AddScheduleFormWidgetState extends State<AddScheduleFormWidget> {
}
},
child: Text('确定'),
);
}
),
),
],
),
],

@ -28,7 +28,7 @@ class HomeWidget extends StatefulWidget {
}
class _HomeWidgetState extends State<HomeWidget> {
GlobalKey<TimetableWidgetState> timetableWidgetKey = GlobalKey(); //key
GlobalKey<TimetableWidgetState> timetableWidgetKey = GlobalKey(); //key,,TimetableWidgetState
late UserController userController;
late CourseController courseController;
@ -76,9 +76,9 @@ class _HomeWidgetState extends State<HomeWidget> {
mainAxisSize: MainAxisSize.min,
children: [
ElevatedButton(
onPressed: () {
onPressed: () async {
// AddCourseFormWidget
Navigator.push(
await Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
@ -86,13 +86,19 @@ class _HomeWidgetState extends State<HomeWidget> {
},
),
);
// setState(() {
//
// });
//
// print("触发更新课程表");
timetableWidgetKey.currentState!.localFutureDo();
},
child: Text('添加课程'),
),
ElevatedButton(
onPressed: () {
onPressed: () async {
// AddCourseFormWidget
Navigator.push(
await Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
@ -103,6 +109,7 @@ class _HomeWidgetState extends State<HomeWidget> {
},
),
);
timetableWidgetKey.currentState!.localFutureDo();
},
child: Text('添加个人计划'),
),
@ -131,9 +138,9 @@ class _HomeWidgetState extends State<HomeWidget> {
),
IconButton(
icon: const Icon(Icons.group_add),
onPressed: () {
onPressed: () async {
//
Navigator.push(
await Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
@ -142,6 +149,8 @@ class _HomeWidgetState extends State<HomeWidget> {
},
),
);
timetableWidgetKey.currentState!.serverFutureDo();
timetableWidgetKey.currentState!.localFutureDo();
},
),
Builder(
@ -162,10 +171,10 @@ class _HomeWidgetState extends State<HomeWidget> {
children: [
UserAccountsDrawerHeader(
accountName: GestureDetector(
onTap: () {
onTap: () async {
if (Setting.user!.getId! == -1) {
//
Navigator.push(
await Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
@ -176,18 +185,19 @@ class _HomeWidgetState extends State<HomeWidget> {
} else {
//退
Setting.saveUser(Setting.nullUser);
setState(() {});
}
setState(() {});
timetableWidgetKey.currentState!.localFutureDo();
},
child: Setting.user!.getId! != -1
? Text(Setting.user!.getUsername!)
: Text('未登录'),
),
accountEmail: GestureDetector(
onTap: () {
onTap: () async {
if (Setting.user!.getId! == -1) {
//
Navigator.push(
await Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
@ -198,8 +208,9 @@ class _HomeWidgetState extends State<HomeWidget> {
} else {
//退
Setting.saveUser(Setting.nullUser);
setState(() {});
}
setState(() {});
timetableWidgetKey.currentState!.localFutureDo();
},
child: Setting.user!.getId! != -1
? Text('退出登录')
@ -212,10 +223,10 @@ class _HomeWidgetState extends State<HomeWidget> {
),
ListTile(
title: Text('导入学校课程'),
onTap: () {
onTap: () async {
//todo
//
Navigator.push(
await Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
@ -223,6 +234,7 @@ class _HomeWidgetState extends State<HomeWidget> {
},
),
);
timetableWidgetKey.currentState!.localFutureDo();
},
),
GestureDetector(
@ -248,10 +260,10 @@ class _HomeWidgetState extends State<HomeWidget> {
},
child: ListTile(
title: Text('用户设置'),
onTap: () {
onTap: () async {
//todo
// deng
Navigator.push(
await Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
@ -259,16 +271,19 @@ class _HomeWidgetState extends State<HomeWidget> {
},
),
);
setState(() {
});
},
),
),
if (Setting.user!.getId! == -1)
ListTile(
title: Text('注册'),
onTap: () {
onTap: () async {
//todo
// UserSettingWight
Navigator.push(
await Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
@ -276,13 +291,15 @@ class _HomeWidgetState extends State<HomeWidget> {
},
),
);
setState(() {
});
},
),
if (Setting.isDeveloperButtonVisible)
ListTile(
title: Text('开发者测试'),
onTap: () {
Navigator.push(
onTap: () async {
await Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
@ -290,13 +307,16 @@ class _HomeWidgetState extends State<HomeWidget> {
},
),
);
setState(() {
});
timetableWidgetKey.currentState!.localFutureDo();
},
),
],
),
);
}),
body: TimetableWidget(),
body: TimetableWidget(key: timetableWidgetKey),
);
}

@ -124,9 +124,8 @@ class _ManageUserTeamWidgetState extends State<ManageUserTeamWidget> {
child: CircularProgressIndicator(),
);
} else {
return Consumer<TeamProvider>(builder: (ctx, teamPro, child) {
print('Rebuild teamPro');
return Scaffold(
return
Scaffold(
resizeToAvoidBottomInset: false,
appBar: AppBar(
title: Text('团队成员'),
@ -180,7 +179,6 @@ class _ManageUserTeamWidgetState extends State<ManageUserTeamWidget> {
)
),
);
});
}
}
}
}

@ -11,10 +11,10 @@ class TeamWidget extends StatefulWidget {
const TeamWidget({Key? key}) : super(key: key);
@override
_TeamWidgetState createState() => _TeamWidgetState();
TeamWidgetState createState() => TeamWidgetState();
}
class _TeamWidgetState extends State<TeamWidget> {
class TeamWidgetState extends State<TeamWidget> {
int firstInit = 0;
List<Team> myTeamList = [];
@ -33,39 +33,25 @@ class _TeamWidgetState extends State<TeamWidget> {
//
myTeamList = await teamController.getMyTeamList();
joinTeamList = await teamController.getJoinedTeamList();
}
dataInitAfterFutherDo() {}
updateAfterFutherDo() {}
setState(() {
});
}
@override
initState() {
super.initState();
futureDo();
//todo: get teamList from database
}
@override
Widget build(BuildContext context) {
return Consumer<TeamUserProvider>(builder: (ctx, teamUserPro, child) {
print('Rebuild teamUserPro');
return FutureBuilder<void>(
future: futureDo(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
//
if (snapshot.connectionState == ConnectionState.done) {
if (firstInit == 0) {
//
dataInitAfterFutherDo();
firstInit = 1;
} else {
//
updateAfterFutherDo();
}
return RefreshIndicator(
print('Rebuild teamUserPro');
return RefreshIndicator(
onRefresh: () {
print('下拉refresh');
return futureDo().then((value) => setState(() {}));
return futureDo();
},
child: CustomScrollView(
slivers: [
@ -148,12 +134,11 @@ class _TeamWidgetState extends State<TeamWidget> {
//
icon: Icon(Icons.delete),
onPressed: () {
print('删除团队'+ team.getTeamName + ' ' + team.id.toString());
teamController
.deleteTeam(team.id!)
.then((value) {
setState(() {
myTeamList.remove(team);
});
futureDo();
});
},
),
@ -236,12 +221,5 @@ class _TeamWidgetState extends State<TeamWidget> {
],
),
);
} else {
return Center(
child: CircularProgressIndicator(),
);
}
});
});
}
}

@ -18,6 +18,7 @@ import '../provider/TimeProvider.dart';
import '../setting/Setting.dart';
class TimetableWidget extends StatefulWidget {
TimetableWidget({required Key key}) : super(key: key);
final double deviceWidth = Setting.deviceWidth;
@override
State<StatefulWidget> createState() =>
@ -85,30 +86,36 @@ class TimetableWidgetState extends State<TimetableWidget> {
TimetableWidgetState({required this.deviceWidth});
updateDateByWeekCount() {}
Future<void> futureDo() async {
print('开始futureDo');
Future<void> localFutureDo() async {
print('开始localFutureDo');
//
courseList = await courseController.getCourses();
taskList = await taskController.getTasks();
workList = await teamController.getWorks();
dataCaculateAfterFutherDo();
print('localFutureDo 完成');
setState(() {});
}
Future<void> serverFutureDo() async {
print('开始serverFutureDo');
//
workList = await teamController.getWorks();
dataCaculateAfterFutherDo();
print('serverFutureDo 完成');
setState(() {});
}
//
@override
initState() {
super.initState();
}
@override
dispose() {
super.dispose();
// Setting.saveInitFlag(false);
}
dataInitAfterFutherDo() {
//
timeBlockWeekMap = {};
timeBlockList = [];
@ -117,27 +124,53 @@ class TimetableWidgetState extends State<TimetableWidget> {
currentWeek = timetableWidgetController.getWeekCount();
showWeek = currentWeek;
// showWeek = 1;
//
showMonth = DateTime.now().month;
dataCaculateAfterFutherDo();
serverFutureDo();
localFutureDo();
}
@override
dispose() {
super.dispose();
// Setting.saveInitFlag(false);
}
dataCaculateAfterFutherDo() {
timeBlockWeekMap = {};
timeBlockList = [];
timeBlockList.addAll(courseList);
timeBlockList.addAll(taskList);
timeBlockList.addAll(workList);
timeBlockWeekMap =
timetableWidgetController.transformCourseMap(timeBlockList);
//
var mondayTime = timetableWidgetController.getmondayTime();
//showMon
showMonth = mondayTime.add(Duration(days: 7 * (showWeek - currentWeek))).month;
//
dateListstr = [];
for (int i = 0; i < 7; i++) {
dateListstr.add((mondayTime.day + i).toString());
if ((mondayTime.day + i) == DateTime.now().day) {
currentWeekDayIndex = i + 1;
}
dateListstr.add(mondayTime
.add(Duration(days: i + 7 * (showWeek - currentWeek)))
.day
.toString()
);
}
//
positions =
timetableWidgetController.convertTimeList(timePoints, deviceWidth);
}
updateAfterFutherDo() {
@ -172,267 +205,267 @@ class TimetableWidgetState extends State<TimetableWidget> {
@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');
return FutureBuilder<void>(
future: futureDo(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
//
if (snapshot.connectionState == ConnectionState.done) {
if (firstInit == 0) {
//
dataInitAfterFutherDo();
firstInit = 1;
} else {
//
updateAfterFutherDo();
}
return RefreshIndicator(
onRefresh: () {
print('下拉refresh');
return futureDo().then((value){
Provider.of<TimeProvider>(context, listen: false).updateTimetable(); //
return RefreshIndicator(
onRefresh: () {
print('下拉refresh');
return serverFutureDo().then((value){
// Provider.of<TimeProvider>(context, listen: false).updateTimetable(); //
});
},
child: GestureDetector(
onHorizontalDragEnd: (details) {
teamController.getWorks().then((value){
workList = value;
setState(() {
});
});
if (details.primaryVelocity! > 0) {
//
setState(() {
showWeek--;
// updateDateByWeekCount();
});
} else if (details.primaryVelocity! < 0) {
//
setState(() {
showWeek++;
// updateDateByWeekCount();
});
}
},
child: GestureDetector(
onHorizontalDragEnd: (details) {
if (details.primaryVelocity! > 0) {
//
setState(() {
showWeek--;
updateDateByWeekCount();
});
} else if (details.primaryVelocity! < 0) {
//
setState(() {
showWeek++;
updateDateByWeekCount();
});
}
},
child: Column(
mainAxisAlignment: MainAxisAlignment.start, //
children: [
SizedBox(
//
//
child: GridView.builder(
shrinkWrap: true,
//
physics: NeverScrollableScrollPhysics(),
//
itemCount: 8,
gridDelegate:
SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 8, childAspectRatio: 1 / 1),
//
itemBuilder: (BuildContext context, int index) {
//item
return Container(
color: index == this.currentWeekDayIndex
? Color(0xf7f7f7) //
: Colors.white,
child: Center(
child: index == 0
? Column(
//
mainAxisAlignment:
MainAxisAlignment.center,
children: [
Container(
// height: 10,
// width: 6,
child: Text(
'' +
showWeek.toString() +
'', //
style: TextStyle(
fontSize: 12,
color: currentWeek ==
showWeek //
? Colors.amber
: Colors.black87)),
),
Container(
// height: 10,
// width: 6,
child: Text(
showMonth.toString() + '', //
style: TextStyle(
fontSize: 12,
color: currentWeek ==
showWeek //
? Colors.amber
: Colors.black87)),
),
],
)
: Column(
mainAxisAlignment:
MainAxisAlignment.center,
children: [
Text(weekList[index - 1], //
style: TextStyle(
fontSize: 14,
color: index ==
currentWeekDayIndex //
? Colors.lightBlue
: Colors.black87)),
SizedBox(
height: 5,
),
Text(dateListstr[index - 1], //
style: TextStyle(
fontSize: 12,
color: index ==
currentWeekDayIndex //
? Colors.lightBlue
: Colors.black87)),
],
),
child: Column(
mainAxisAlignment: MainAxisAlignment.start, //
children: [
SizedBox(
//
//
child: GridView.builder(
shrinkWrap: true,
//
physics: NeverScrollableScrollPhysics(),
//
itemCount: 8,
gridDelegate:
SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 8, childAspectRatio: 1 / 1),
//
itemBuilder: (BuildContext context, int index) {
//item
return Container(
color: index == this.currentWeekDayIndex
? Color(0xf7f7f7) //
: Colors.white,
child: Center(
child: index == 0
? Column(
//
mainAxisAlignment:
MainAxisAlignment.center,
children: [
Container(
// height: 10,
// width: 6,
child: Text(
'' +
showWeek.toString() +
'', //
style: TextStyle(
fontSize: 12,
color: currentWeek ==
showWeek //
? Colors.amber
: Colors.black87)),
),
Container(
// height: 10,
// width: 6,
child: Text(
showMonth.toString() + '', //
style: TextStyle(
fontSize: 12,
color: currentWeek ==
showWeek //
? Colors.amber
: Colors.black87)),
),
],
)
: Column(
mainAxisAlignment:
MainAxisAlignment.center,
children: [
Text(weekList[index - 1], //
style: TextStyle(
fontSize: 14,
color: index ==
currentWeekDayIndex //
? Colors.lightBlue
: Colors.black87)),
SizedBox(
height: 5,
),
Text(dateListstr[index - 1], //
style: TextStyle(
fontSize: 12,
color: index ==
currentWeekDayIndex //
? Colors.lightBlue
: Colors.black87)),
],
),
);
}),
),
//stack
Expanded(
child: SingleChildScrollView(
child: Row(
children: [
//stack
Container(
width: deviceWidth,
height: 2000,
child: Stack(
alignment: Alignment.center,
children: [
// Stack
Positioned(
top: 0,
left: 0,
child: Container(
width: deviceWidth,
height: 2000,
child: Stack(
children: List.generate(
//
positions.length,
(index) => Positioned(
top: positions[index].dy,
left: positions[index].dx,
child: Row(
children: [
Text(
timePoints[index]
.hour
.toString()
.padLeft(2, '0') +
':' +
timePoints[index]
.minute
.toString()
.padLeft(2, '0'),
),
Container(
width: deviceWidth * 0.04,
height: 10,
decoration: BoxDecoration(
shape: BoxShape.circle,
border: Border.all(
color: Colors.amber,
width: 2,
),
);
}),
),
//stack
Expanded(
child: SingleChildScrollView(
child: Row(
children: [
//stack
Container(
width: deviceWidth,
height: 2000,
child: Stack(
alignment: Alignment.center,
children: [
// Stack
Positioned(
top: 0,
left: 0,
child: Container(
width: deviceWidth,
height: 2000,
child: Stack(
children: List.generate(
//
positions.length,
(index) => Positioned(
top: positions[index].dy,
left: positions[index].dx,
child: Row(
children: [
Text(
timePoints[index]
.hour
.toString()
.padLeft(2, '0') +
':' +
timePoints[index]
.minute
.toString()
.padLeft(2, '0'),
),
Container(
width: deviceWidth * 0.04,
height: 10,
decoration: BoxDecoration(
shape: BoxShape.circle,
border: Border.all(
color: Colors.amber,
width: 2,
),
),
),
),
Container(
width: deviceWidth * 0.84,
height: 2,
color: Colors.lightBlue
),
],
Container(
width: deviceWidth * 0.84,
height: 2,
color: Colors.lightBlue
),
],
),
),
),
),
),
)),
//Stack
Container(
constraints: BoxConstraints
.expand(), // 使constraints
// width: 390,
// height: 2000,
child: Stack(
children: List.generate(
timeBlockWeekMap
.containsKey(showWeek)
? timeBlockWeekMap[showWeek]!
.length
: 0,
(index) {
var currentItem = timeBlockWeekMap[
showWeek]![index];
return Positioned(
top: timetableWidgetController
.getdy(currentItem),
left: timetableWidgetController
.getdx(currentItem) +
deviceWidth * 0.15,
child: SingleChildScrollView(
child: Container(
width: deviceWidth * 0.115,
height:
timetableWidgetController
.getHeight(
currentItem),
decoration: BoxDecoration(
color: getItemColor(
)),
//Stack
Container(
constraints: BoxConstraints
.expand(), // 使constraints
// width: 390,
// height: 2000,
child: Stack(
children: List.generate(
timeBlockWeekMap
.containsKey(showWeek)
? timeBlockWeekMap[showWeek]!
.length
: 0,
(index) {
var currentItem = timeBlockWeekMap[
showWeek]![index];
return Positioned(
top: timetableWidgetController
.getdy(currentItem),
left: timetableWidgetController
.getdx(currentItem) +
deviceWidth * 0.15,
child: SingleChildScrollView(
child: Container(
width: deviceWidth * 0.115,
height:
timetableWidgetController
.getHeight(
currentItem),
borderRadius:
BorderRadius.all(
Radius.circular(10.0),
decoration: BoxDecoration(
color: getItemColor(
currentItem),
borderRadius:
BorderRadius.all(
Radius.circular(10.0),
),
),
),
child: SingleChildScrollView(
child: Column(
children: [
if (currentItem
is Course)
CouresBlockContenWidget(
currentItem:
currentItem),
if (currentItem is Task)
TaskBlockContentWidget(
currentItem:
currentItem),
if (currentItem is Work)
WorkBlockContentWidget(
currentItem:
currentItem),
],
child: SingleChildScrollView(
child: Column(
children: [
if (currentItem
is Course)
CouresBlockContenWidget(
currentItem:
currentItem),
if (currentItem is Task)
TaskBlockContentWidget(
currentItem:
currentItem),
if (currentItem is Work)
WorkBlockContentWidget(
currentItem:
currentItem),
],
),
),
),
),
),
);
},
),
))
],
);
},
),
))
],
),
),
),
],
),
))
],
),
],
),
))
],
),
);
} else {
return Center(
child: CircularProgressIndicator(),
);
}
});
),
);
;
});
}

@ -34,7 +34,7 @@ class _UserSettingWightState extends State<UserSettingWidget> {
await savepixelToMinuteRatio_ratio(number);
DateTime date = DateTime.tryParse(_startDateController.text) ?? DateTime.now();
await saveStartDate(date);
Provider.of<TimeProvider>(context, listen: false).updateTimetable(); //
// Provider.of<TimeProvider>(context, listen: false).updateTimetable(); //
setState(() {
});
}

@ -102,8 +102,9 @@ const teamController = {
// 删除团队
deleteTeam: async function(req, res, next) {
try {
console.log('delete_team:');
const teamId = req.body.teamId; // Assuming the team ID is passed as a parameter
const result = await Team.delete(teamId); // Use an appropriate function to delete the team
const result = await Team.delete('id',teamId); // Use an appropriate function to delete the team
if (result) {
res.json({
code: 200,

Loading…
Cancel
Save