Flutter 代码优化:精简课程更新逻辑
getApplicationDocumentsDirectory().then((value) {
Dio dio = new Dio();
File file = new File(value.path + '/course.json');
file.exists().then((value) async {
if (!value) {
//没有则下载
downApkFunction();
} else {
hItems(DateTime.now());
if (Global.auto_update_course && !Global.isrefreshcourse) {
Global.isrefreshcourse = true;
var loginInfo = await Global().getLoginInfo();
Global().No_perception_login().then((value) async {
var url = 'https://nepu-backend-nepu-restart-sffsxhkzaj.cn-beijing.fcapp.run/course' + loginInfo;
getApplicationDocumentsDirectory().then((value) async {
//判断响应状态
Response response = await dio.get(url);
if (response.statusCode == 500) {
AchievementView(context,
title: '与教务同步最新课程失败!',
subTitle: '可能是服务器出现短暂问题,请稍后再试',
icon: Icon(
Icons.error,
color: Colors.white,
),
color: Colors.red,
duration: Duration(seconds: 3),
isCircle: true,
listener: (status) {})
..show();
return;
} else if (response.statusCode == 200) {
if (!response.data.toString().contains('fail')) {
Directory directory = await getApplicationDocumentsDirectory();
String path = directory.path + '/course.json';
File file = new File(path);
file.writeAsString(response.data);
Global.isfirstread = true;
jpushs().uploadpushid();
var scoreinfo = Global.scoreinfos[Global.scoreinfos.length - 1]['cjdm'].toString();
var urlscore = 'https://nepu-backend-nepu-restart-sffsxhkzaj.cn-beijing.fcapp.run/getnewscore' + loginInfo + '&index=' + scoreinfo;
print(urlscore);
getApplicationDocumentsDirectory().then((value) async {
try {
Response response = await dio.get(urlscore);
if (response.statusCode == 200) {
//获取路径
Directory directory = await getApplicationDocumentsDirectory();
String path = directory.path + '/score.json';
//追加文件
File file = new File(path);
file.readAsString().then((value) {
value = value.replaceAll(']', '') + ',' + response.data.toString().replaceAll('[', '');
file.writeAsString(value);
Global().getlist();
});
Dialogs.materialDialog(
color: Colors.white,
msg: '去看看不?',
title: '有新成绩啦!',
lottieBuilder: Lottie.asset(
'assets/rockert-new.json',
fit: BoxFit.contain,
),
context: context,
actions: [
IconButton(
onPressed: () {
//关闭
Navigator.pop(context);
},
icon: Icon(Icons.cancel_outlined),
),
IconButton(
onPressed: () async {
Navigator.pop(context);
//跳转到score页面
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => scorepage()));
},
icon: Icon(Icons.check),
),
],
);
}
} catch (e) {
print(e);
}
});
AchievementView(context,
title: '课程获取成功啦!',
subTitle: '你的课程已经同步至最新',
icon: Icon(
Icons.error,
color: Colors.white,
),
color: Global.home_currentcolor,
duration: Duration(seconds: 3),
isCircle: true,
listener: (status) {})
..show();
} else {
AchievementView(context,
title: '与教务同步课程失败!',
subTitle: '请检查你的密码或者教务系统是否正常',
icon: Icon(
Icons.error,
color: Colors.white,
),
color: Colors.red,
duration: Duration(seconds: 3),
isCircle: true,
listener: (status) {})
..show();
return;
}
}
});
});
}
//有则读取
//判断是否windows
if (Platform.isWindows) {
//跳转到windows页面
Navigator.push(context, MaterialPageRoute(builder: (context) {
return windwosfloat();
}));
}
updateappx();
xinshouyindao();
shownotice();
}
});
});
代码优化说明:
- 代码结构优化: 将嵌套的 then() 函数简化为 async/await 语法,使代码更易读。
- 变量命名: 使用更具描述性的变量名,例如将
value改为loginInfo,使代码更易理解。 - 代码逻辑优化: 将重复的代码块提取为独立的函数,例如获取课程数据、显示通知等。
- 错误处理: 使用 try/catch 块处理网络请求等可能发生的异常。
- 代码注释: 添加必要的注释,解释代码逻辑。
- 代码风格: 遵循一致的代码风格,例如使用单引号代替双引号。
通过以上优化,代码更易读、易懂,也更易于维护。
原文地址: http://www.cveoy.top/t/topic/ojHG 著作权归作者所有。请勿转载和采集!