Flutter应用更新插件update_app_k的使用
Flutter应用更新插件update_app_k的使用
简介
这是一个基于update_app
库的变体库,用于修复一些问题。
Bug修复:
- 修复了iOS App Store硬编码跳转链接模板,改为全链接参数。
插件功能介绍
插件名称
功能描述
该插件用于更新应用。通过传入更新地址,可以实现应用更新。
- Android部分:使用
DownloadManager
实现文件下载。如果文件已下载,则直接安装。 - iOS部分:不支持外部更新,跳转至App Store。
使用体验Demo
下载APK
您可以从以下链接下载演示APK: 下载APK
效果图
如何使用
导入插件
import 'package:update_app_k/update_app.dart';
更新逻辑
1. 下载应用
var downloadId = await UpdateApp.updateApp(
url: "apk下载路径", // APK下载地址
appleStoreUrl: "375380948", // iOS App Store ID
title: "通知标题", // Android通知栏标题
description: "通知描述", // Android通知栏描述
);
2. 查询下载进度
var process = await UpdateApp.downloadProcess(downloadId: downloadId);
// 当前下载进度
double currentProgress = process.current / process.count;
// 下载状态
String status = process.status.toString();
完整示例代码
以下是一个完整的示例代码,展示了如何使用update_app_k
插件实现应用更新功能:
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:update_app_k/update_app.dart';
void main() => runApp(MyApp());
class MyApp extends StatefulWidget {
[@override](/user/override)
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
// 定时器,用于监控下载进度
Timer? timer;
// 下载进度
double downloadProcess = 0;
// 下载状态
String downloadStatus = "";
[@override](/user/override)
void initState() {
super.initState();
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('应用更新'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
// 下载进度条
Container(
padding: EdgeInsets.all(16),
width: 200,
height: 200,
child: CircularProgressIndicator(
value: downloadProcess,
strokeWidth: 10,
),
),
// 显示下载状态
Text("下载状态: $downloadStatus"),
Text("请将下载地址替换为自己的地址"),
],
),
),
bottomNavigationBar: Container(
padding: EdgeInsets.all(20),
child: Column(
mainAxisAlignment: MainAxisAlignment.end,
children: [
Text(
'点击右下角按钮开始下载!',
style: TextStyle(color: Theme.of(context).primaryColor),
),
Text('适配Android 6.0'),
Text('适配Android 7.0'),
Text('适配Android 8.0'),
Text('适配Android 9.0'),
Text('适配Android 10.0'),
Text('添加下载进度监控'),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: download,
child: Icon(Icons.file_download),
),
floatingActionButtonLocation: FloatingActionButtonLocation.endDocked,
),
);
}
[@override](/user/override)
void dispose() {
timer?.cancel(); // 停止定时器
super.dispose();
}
/// 开始下载应用
void download() async {
// 调用updateApp方法下载APK
var downloadId = await UpdateApp.updateApp(
url: "https://raw.githubusercontent.com/mofada/flutter_update_app/master/apks/app-release.apk",
appleStoreUrl: "https://apps.apple.com/cn/app/id375380948",
title: "更新通知",
description: "新版本已发布",
);
// 检查下载结果
if (downloadId == 0) {
// 如果本地已有相同版本的APK,下载成功
setState(() {
downloadProcess = 1;
downloadStatus = "下载成功";
});
return;
}
if (downloadId == -1) {
// 如果下载失败
setState(() {
downloadProcess = 1;
downloadStatus = "下载失败";
});
return;
}
// 开始监控下载进度
timer = Timer.periodic(Duration(milliseconds: 100), (timer) async {
// 获取当前下载进度
var process = await UpdateApp.downloadProcess(downloadId: downloadId);
// 更新UI状态
setState(() {
downloadProcess = process.current / process.count;
downloadStatus = process.status.toString();
});
// 如果下载完成或失败,停止计时
if (process.status == ProcessState.STATUS_SUCCESSFUL ||
process.status == ProcessState.STATUS_FAILED) {
timer.cancel();
}
});
}
}
1 回复
更多关于Flutter应用更新插件update_app_k的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
update_app_k
是一个用于 Flutter 应用的插件,它可以帮助开发者轻松实现应用更新功能。该插件支持从应用内检查更新、下载新版本并安装。以下是使用 update_app_k
插件的详细步骤:
1. 添加依赖
首先,在 pubspec.yaml
文件中添加 update_app_k
插件的依赖:
dependencies:
flutter:
sdk: flutter
update_app_k: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来安装依赖。
2. 配置 Android 和 iOS 项目
Android
在 AndroidManifest.xml
文件中添加以下权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
iOS
在 Info.plist
文件中添加以下权限:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
3. 使用 update_app_k
插件
在你的 Flutter 代码中,使用 update_app_k
插件来检查更新并安装新版本。
import 'package:flutter/material.dart';
import 'package:update_app_k/update_app_k.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: HomeScreen(),
);
}
}
class HomeScreen extends StatelessWidget {
Future<void> checkForUpdate() async {
try {
// 检查更新
final updateInfo = await UpdateAppK.checkUpdate(
url: 'https://your-server.com/update.json', // 更新信息的 JSON 文件 URL
);
if (updateInfo != null && updateInfo.isUpdateAvailable) {
// 如果有更新,显示更新对话框
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text('发现新版本'),
content: Text('是否要更新到版本 ${updateInfo.newVersion}?'),
actions: <Widget>[
TextButton(
child: Text('取消'),
onPressed: () {
Navigator.of(context).pop();
},
),
TextButton(
child: Text('更新'),
onPressed: () async {
// 下载并安装更新
await UpdateAppK.performUpdate(
url: updateInfo.apkUrl, // APK 下载 URL
fileName: 'app_update.apk', // 下载的文件名
);
Navigator.of(context).pop();
},
),
],
);
},
);
} else {
// 没有更新
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text('没有更新'),
content: Text('当前已是最新版本。'),
actions: <Widget>[
TextButton(
child: Text('确定'),
onPressed: () {
Navigator.of(context).pop();
},
),
],
);
},
);
}
} catch (e) {
// 处理错误
print('检查更新失败: $e');
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('应用更新示例'),
),
body: Center(
child: ElevatedButton(
onPressed: checkForUpdate,
child: Text('检查更新'),
),
),
);
}
}
4. 更新信息的 JSON 文件
update_app_k
插件需要一个 JSON 文件来获取更新信息。JSON 文件的格式如下:
{
"version": "1.0.1",
"apkUrl": "https://your-server.com/app_update.apk",
"description": "修复了一些已知问题,优化了性能。"
}