Flutter如何实现app_update下载文件
在Flutter中如何实现app_update功能并下载文件?目前需要让用户检测到新版本时自动下载安装包,但不知道该如何处理文件下载和进度显示。希望能提供一个完整的实现方案,包括版本检测、下载文件、显示进度条以及安装apk的步骤。最好能兼容Android和iOS平台。
2 回复
Flutter中可通过package_info_plus获取版本号,再使用http或dio下载APK文件。下载后使用open_file打开文件进行安装。注意Android需申请存储权限并配置FileProvider。
更多关于Flutter如何实现app_update下载文件的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中实现应用更新文件下载,可以通过以下步骤完成:
1. 添加依赖
在 pubspec.yaml 中添加:
dependencies:
flutter_downloader: ^1.10.2
permission_handler: ^10.0.0 # 用于权限处理
path_provider: ^2.0.0 # 获取存储路径
2. 配置权限
Android (android/app/src/main/AndroidManifest.xml):
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
iOS (ios/Runner/Info.plist):
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
3. 核心下载代码
import 'package:flutter_downloader/flutter_downloader.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:path_provider/path_provider.dart';
class AppUpdate {
static Future<void> downloadUpdate(String url) async {
// 检查存储权限
if (await Permission.storage.request().isGranted) {
final directory = await getExternalStorageDirectory();
final taskId = await FlutterDownloader.enqueue(
url: url,
savedDir: directory!.path,
fileName: 'app_update.apk',
showNotification: true,
openFileFromNotification: true,
);
}
}
// 监听下载进度
static void setDownloadCallback() {
FlutterDownloader.registerCallback(downloadCallback);
}
static void downloadCallback(String id, DownloadTaskStatus status, int progress) {
print('下载进度: $progress%');
if (status == DownloadTaskStatus.complete) {
print('下载完成');
}
}
}
4. 初始化与使用
在 main() 中初始化:
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await FlutterDownloader.initialize();
AppUpdate.setDownloadCallback();
runApp(MyApp());
}
触发下载:
ElevatedButton(
onPressed: () => AppUpdate.downloadUpdate('https://example.com/update.apk'),
child: Text('下载更新'),
)
关键说明:
- Android:下载APK后需要手动安装
- iOS:只能通过App Store更新,此方法仅适用于企业证书应用
- 建议添加版本检查逻辑,通过API获取最新版本号
- 可结合
package_info_plus获取当前版本信息
这种方式适用于Android应用内更新,iOS需遵循官方审核指南。

