Flutter 应用更新 - 简化代码实现
Flutter 应用更新 - 简化代码实现
本文提供 Flutter 应用更新的代码示例,简化了代码结构,并使用 async/await 提高代码可读性。示例代码涵盖了新版本检测、下载安装、更新提示等功能,并提供 Android 和 iOS 平台的解决方案。
void updateappx() async {
final value = await getApplicationDocumentsDirectory();
final pathx = value.path;
final file = File('$pathx/version.txt');
if (await file.exists()) {
localversion = await file.readAsString();
final dio = Dio();
final value = await dio.get('https://update-nepucouseupdate-bmgwsddxxl.cn-hongkong.fcapp.run/update');
final version = value.data[0]['version'].toString();
if (version != Global.version && version != localversion) {
await Dialogs.materialDialog(
color: Colors.white,
msg: '要下载吗?',
title: '有新版本啦,版本号是$version
${value.data[0]['descrption']}',
lottieBuilder: Lottie.asset(
'assets/rockert-new.json',
fit: BoxFit.contain,
),
context: context,
actions: [
IconButton(
onPressed: () {
file.writeAsString(version);
Navigator.pop(context);
},
icon: Icon(Icons.cancel_outlined),
),
IconButton(
onPressed: () async {
file.writeAsString(version);
Navigator.pop(context);
if (Platform.isAndroid) {
final pd = ProgressDialog(context: context);
pd.show(
max: 100,
msg: '准备下载更新...',
msgMaxLines: 5,
completed: Completed(
completedMsg: "下载完成!",
completedImage: AssetImage("assets/completed.gif"),
completionDelay: 2500,
),
);
await EasyAppInstaller.instance.downloadAndInstallApk(
fileUrl: value.data[0]['link'],
fileDirectory: "updateApk",
fileName: "newApk.apk",
explainContent: "快去开启权限!!!",
onDownloadingListener: (progress) {
if (progress < 100) {
pd.update(value: progress.toInt(), msg: '安装包正在下载...');
} else {
pd.update(value: progress.toInt(), msg: '安装包下载完成...');
}
},
onCancelTagListener: (cancelTag) {
_cancelTag = cancelTag;
},
);
} else {
Clipboard.setData(ClipboardData(
text: 'https://wwai.lanzouy.com/b02pwpe5e?password=4huv'
));
AchievementView(context,
title: "复制成功",
subTitle: '请手动去浏览器粘贴网址,密码是4huv,请手动下载对应您的平台',
icon: Icon(Icons.insert_emoticon, color: Colors.white),
color: Colors.green,
duration: Duration(seconds: 15),
isCircle: true,
listener: (status) { print(status); },
).show();
}
},
icon: Icon(Icons.check),
),
],
);
}
} else {
await file.create();
await getApplicationDocumentsDirectory().then((value) async {
if (await file.exists()) {
final dio = Dio();
final value = await dio.get('https://update-nepucouseupdate-bmgwsddxxl.cn-hongkong.fcapp.run/update');
final version = value.data[0]['version'].toString();
print(value.toString());
if (version != Global.version && version != localversion) {
await Dialogs.materialDialog(
color: Colors.white,
msg: '要下载吗?',
title: '有新版本啦,版本号是$version
${value.data[0]['descrption']}',
lottieBuilder: Lottie.asset(
'assets/rockert-new.json',
fit: BoxFit.contain,
),
context: context,
actions: [
IconButton(
onPressed: () {
file.writeAsString(version);
Navigator.pop(context);
},
icon: Icon(Icons.cancel_outlined),
),
IconButton(
onPressed: () async {
file.writeAsString(version);
Navigator.pop(context);
final pd = ProgressDialog(context: context);
pd.show(
max: 100,
msg: '准备下载更新...',
msgMaxLines: 5,
completed: Completed(
completedMsg: "下载完成!",
completedImage: AssetImage("assets/completed.gif"),
completionDelay: 2500,
),
);
await EasyAppInstaller.instance.downloadAndInstallApk(
fileUrl: value.data[0]['link'],
fileDirectory: "updateApk",
fileName: "newApk.apk",
explainContent: "快去开启权限!!!",
onDownloadingListener: (progress) {
if (progress < 100) {
pd.update(value: progress.toInt(), msg: '安装包正在下载...');
} else {
file.writeAsString(version);
pd.update(value: progress.toInt(), msg: '安装包下载完成...');
}
},
onCancelTagListener: (cancelTag) {
_cancelTag = cancelTag;
},
);
},
icon: Icon(Icons.check),
),
],
);
}
}
});
}
}
代码说明:
- 使用
async/await简化代码逻辑,使代码更易读。 - 将文件操作和网络请求封装到
async函数中,提高代码可读性。 - 使用
if语句判断文件是否存在,避免重复读取文件内容。 - 使用
Dialogs.materialDialog显示更新提示,并提供下载和取消按钮。 - 使用
EasyAppInstaller库实现应用下载安装功能,支持 Android 和 iOS 平台。 - 在 iOS 平台,将下载链接复制到剪切板,用户手动下载。
注意:
- 需要引入
dio、easy_app_installer、dialogs等库。 Global.version变量需要替换成应用的当前版本号。https://update-nepucouseupdate-bmgwsddxxl.cn-hongkong.fcapp.run/update是更新信息接口地址,需要根据实际情况修改。assets/rockert-new.json是 Lottie 动画文件路径,需要根据实际情况修改。assets/completed.gif是下载完成动画文件路径,需要根据实际情况修改。
其他:
- 代码示例仅供参考,实际项目中可能需要根据具体需求进行调整。
- 建议使用第三方库,例如
package:update_app,简化更新功能的实现。
希望本文的代码示例能帮助你实现 Flutter 应用更新功能,如有疑问,请留言交流!
原文地址: http://www.cveoy.top/t/topic/ojHs 著作权归作者所有。请勿转载和采集!