在我们开发app的时候,app的版本升级是必不可少的,那么在flutter中我们该如何实现这个需求呢?下面带来一个简单的Flutter App版本升级方法
首先我们需要几个插件:
flutter_downloader
链接:https://pub.flutter-io.cn/packages/flutter_downloader
dio
链接:https://pub.flutter-io.cn/packages/dio
path_provider
链接:https://pub.flutter-io.cn/packages/path_provider
open_file
链接:https://pub.flutter-io.cn/packages/open_file
将以上4个插件添加到pubspec.yaml中
首先我们需要获取apk的存放位置,因为我们下载最新版的apk时,需要一个路径来存放apk。
引用path_provider
插件
import 'package:path_provider/path_provider.dart';
然后创建_apkLocalPath函数
// 获取apk存放地址(外部路径)
Future<String> get _apkLocalPath async {
final directory = await getExternalStorageDirectory();
return directory.path;
}
第二步,我们需要创建apk安装函数,引用
open_file
插件,
import 'package:open_file/open_file.dart';
///安装app
Future<Null> _installApk() async {
String path = await _apkLocalPath;
await OpenFile.open(path + '/' + apkName);
}
第三步,创建下载函数0v0,引用
flutter_downloader
与dio
插件,
import 'package:dio/dio.dart';
import 'package:flutter_downloader/flutter_downloader.dart';
/// 下载
Future<void> executeDownload() async {
//apk存放路径
final path = await _apkLocalPath;
//获取版本
var result = await Dio()
.get("https://jderp.3mzz.cn/update/app/version.txt")
.catchError((e) {
print('获取版本号失败==》' + e);
});
apkName = '测试' + result.toString() + '.apk';
File file = File(path + '/' + apkName);
if (await file.exists()) await file.delete();
//下载
final taskId = await FlutterDownloader.enqueue(
url: 'xxxx',//下载最新apk的网络地址
savedDir: path,
fileName: apkName,
showNotification: true,
openFileFromNotification: true);
FlutterDownloader.registerCallback((id, status, progress) {
// 当下载完成时,调用安装
if (taskId == id && status == DownloadTaskStatus.complete) {
_installApk();
}
});
}
在你需要的地方调用executeDownload即可,
下面是全部代码
import 'dart:io';
import 'package:dio/dio.dart';
import 'package:flutter_downloader/flutter_downloader.dart';
import 'package:path_provider/path_provider.dart';
import 'package:open_file/open_file.dart';
///版本升级
class VersionUpgrade {
String apkName;
// 获取apk存放地址(外部路径)
Future<String> get _apkLocalPath async {
final directory = await getExternalStorageDirectory();
return directory.path;
}
/// 下载
Future<void> executeDownload() async {
final path = await _apkLocalPath;
var result = await Dio()
.get("https://jderp.3mzz.cn/update/app/version.txt")
.catchError((e) {
print('获取版本号失败==》' + e);
});
apkName = 'xxx' + result.toString() + '.apk';
File file = File(path + '/' + apkName);
if (await file.exists()) await file.delete();
//下载
final taskId = await FlutterDownloader.enqueue(
url: 'https://jderp.3mzz.cn/update/app/jderp.apk',
savedDir: path,
fileName: apkName,
showNotification: true,
openFileFromNotification: true);
FlutterDownloader.registerCallback((id, status, progress) {
// 当下载完成时,调用安装
if (taskId == id && status == DownloadTaskStatus.complete) {
_installApk();
}
});
}
///安装app
Future<Null> _installApk() async {
String path = await _apkLocalPath;
await OpenFile.open(path + '/' + apkName);
}
}