使用flutter_xupdate 更新 flutter app版本
2026/5/16 10:42:27 网站建设 项目流程

flutter_update 使用说明

说明: flutter_update 基于 GitHub - xuexiangjys/flutter_xupdate: A Flutter plugin for XUpdate(Android Version Update Library) 升级而来 ,(pub 版本 flutter_xupdate - Dart API docs (pub.dev))。

本地环境flutter 3.24.5 dart 3.5.4

使用说明: 参考 flutter_xupdate 一键实现Flutter应用版本更新的插件 - 知乎 (zhihu.com)

1.集成示例:

1.通过git远程集成(不建议):

flutter_update: git: url: "https://gitee.com/zhu-xianjun-123/flutter_xupdate.git"

2.本地集成(推荐) 克隆项目至本地,新建packages目录,放入到文件夹中

flutter_update: path: "./packages/flutter_xupdate"

2.flutter 代码 (生产环境)

使用GetService 全局任务

class AuthService extends GetxService { final Rx<bool> _login = false.obs; ​ get login => _login.value; Dio? dio; final update_json = "https://gitee.com/zhu-xianjun-123/music/raw/master/json/update_custom.json"; ​ @override void onInit() async { super.onInit(); dio = Dio(); final result = await dio?.get(update_json); UpdateEntity updateEntity = UpdateEntity.fromJson(result!.data); final info = await PackageInfo.fromPlatform(); final current_version = Version(info.version); final update_version = Version(updateEntity.versionName!); if(update_version >current_version ) { FlutterXUpdate.updateByInfo(updateEntity:updateEntity); } } ​ Future<AuthService> initLoginState() async { ///阻塞判断接口状态 正常应该是请求 如果不成功则刷新 await Future.delayed(const Duration(milliseconds: 1500)); String? token = HiveService.get("token"); ​ if (Validators.isNotNullOrEmpty(token)) { _login.value = true; } else { _login.value = false; } ​ return this; } ​ void changeLoginStatus(bool status) { _login.value = status; } ​ void setLoginState(bool status) { _login.value = status; } ​ @override void onClose() { super.onClose(); Log.i("onClose ~~~~~"); dio?.close(); } }

在mian.dart 初始化

Future<void> _initializeApp() async { WidgetsFlutterBinding.ensureInitialized(); Log().init(); ApiClient().init(); //在检测更新前初始化逻辑 initXUpdate(); await HiveService.init(); await Get.putAsync(() => AuthService().initLoginState()); } ​ void initXUpdate() { if (Platform.isAndroid) { FlutterXUpdate.init( ​ ///是否输出日志 debug: true, ​ ///是否使用post请求 isPost: false, ​ ///post请求是否是上传json isPostJson: false, ​ ///请求响应超时时间 timeout: 25000, ​ ///是否开启自动模式 isWifiOnly: false, ​ ///是否开启自动模式 isAutoMode: false, ​ ///需要设置的公共参数 supportSilentInstall: false, ​ ///在下载过程中,如果点击了取消的话,是否弹出切换下载方式的重试提示弹窗 enableRetry: false) .then((value) { Log.i(value.toString()); }).catchError((error) { Log.e(error.toString()); }); } }

3.flutter 代码

全部使用示例,使用getx

2.1 controller层

import 'dart:async'; import 'dart:io'; ​ import 'package:flutter_update/flutter_xupdate.dart'; import 'package:get/get.dart'; ​ import '../../../models/app_info.dart'; import '../../../utils/log.dart'; ​ class UpdateExampleController extends GetxController { Rx<String> _message = Rx(''); Rx<AppInfo?> app_info = Rx(null); //json 示例 推荐使用 final String _updateUrl = 'https://gitee.com/xuexiangjys/XUpdate/raw/master/jsonapi/update_test.json'; ​ final String _updateUrl2 = 'https://gitee.com/xuexiangjys/XUpdate/raw/master/jsonapi/update_forced.json'; ​ final String _updateUrl3 = 'https://gitee.com/xuexiangjys/XUpdate/raw/master/jsonapi/update_custom.json'; ​ @override void onInit() { super.onInit(); initXUpdate(); } ​ ​ ​ ///默认App更新 void checkUpdateDefault() { FlutterXUpdate.checkUpdate(url: _updateUrl); } ​ ///默认App更新 + 支持后台更新 void checkUpdateSupportBackground() { FlutterXUpdate.checkUpdate(url: _updateUrl, supportBackgroundUpdate: true); } ​ ///调整宽高比 void checkUpdateRatio() { FlutterXUpdate.checkUpdate(url: _updateUrl, widthRatio: 0.6); } ​ ///强制更新 void checkUpdateForce() { FlutterXUpdate.checkUpdate(url: _updateUrl2); } ​ ///自动模式, 如果需要完全无人干预,自动更新,需要root权限【静默安装需要】 void checkUpdateAutoMode() { FlutterXUpdate.checkUpdate(url: _updateUrl, isAutoMode: true); } ​ ///下载时点击取消允许切换下载方式 void enableChangeDownLoadType() { FlutterXUpdate.checkUpdate( url: _updateUrl, overrideGlobalRetryStrategy: true, enableRetry: true, retryContent: "Github下载速度太慢了,是否考虑切换蒲公英下载?", retryUrl: "https://www.pgyer.com/flutter_learn"); } ​ ///显示重试提示弹窗 void showRetryDialogTip() { FlutterXUpdate.showRetryUpdateTipDialog( // retryContent: "Github下载速度太慢了,是否考虑切换蒲公英下载?", retryUrl: "https://www.pgyer.com/flutter_learn"); } ​ ///使用自定义json解析 void customJsonParse() { FlutterXUpdate.checkUpdate(url: _updateUrl3, isCustomParse: true); } ​ ///直接传入UpdateEntity进行更新提示 void checkUpdateByUpdateEntity() { UpdateEntity updateEntity = UpdateEntity( hasUpdate: true, isForce: false, isIgnorable: false, versionCode: 3, versionName: "1.0.2", updateContent: "\r\n1、优化api接口。\r\n2、添加使用demo演示。\r\n3、新增自定义更新服务API接口。\r\n4、优化更新提示界面。", downloadUrl: "https://xuexiangjys.oss-cn-shanghai.aliyuncs.com/apk/xupdate_demo_1.0.2.apk", apkSize: 2048); FlutterXUpdate.updateByInfo(updateEntity:updateEntity); } ​ ///自定义更新弹窗样式 void customPromptDialog() { FlutterXUpdate.checkUpdate( url: _updateUrl, themeColor: '#FFFFAC5D', topImageRes: 'bg_update_top', buttonTextColor: '#FFFFFFFF'); } ​ ///定时执行任务 void timerUpdateTask() { Timer.periodic(const Duration(seconds: 5), (timer) { checkUpdateDefault(); }); } ​ void initXUpdate() { if (Platform.isAndroid) { FlutterXUpdate.init( ​ ///是否输出日志 debug: true, ​ ///是否使用post请求 isPost: false, ​ ///post请求是否是上传json isPostJson: false, ​ ///请求响应超时时间 timeout: 25000, ​ ///是否开启自动模式 isWifiOnly: false, ​ ///是否开启自动模式 isAutoMode: false, ​ ///需要设置的公共参数 supportSilentInstall: false, ​ ///在下载过程中,如果点击了取消的话,是否弹出切换下载方式的重试提示弹窗 enableRetry: false) .then((value) { _message.value = value?["message"]; }).catchError((error) { Log.e(error.toString()); }); } } } ​

全部示例:

import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'package:music/pages/demo/update_example/update_example_controller.dart'; import 'package:tdesign_flutter/tdesign_flutter.dart'; ​ import '../../../utils/adapt.dart'; ​ class UpdateExampleView extends GetView<UpdateExampleController> { const UpdateExampleView({super.key}); ​ @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text("升级更细示例")), body: Container( width: Adapt.screenW(), child: Padding(padding: EdgeInsets.symmetric(horizontal: 20.w ), child: Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ TDButton( width: double.infinity, text: "直接传入UpdateEntity进行更新", theme: TDButtonTheme.primary, size: TDButtonSize.large, onTap: controller.checkUpdateByUpdateEntity, ), SizedBox(height: 20.h), TDButton( width: double.infinity, text: "默认App更新", theme: TDButtonTheme.primary, size: TDButtonSize.large, onTap: controller.checkUpdateDefault, ), SizedBox(height: 20.h), TDButton( width: double.infinity, text: "默认App更新 + 支持后台更新", theme: TDButtonTheme.primary, size: TDButtonSize.large, onTap: controller.checkUpdateSupportBackground, ), SizedBox(height: 20.h), ​ TDButton( width: double.infinity, text: "强制更新", theme: TDButtonTheme.primary, size: TDButtonSize.large, onTap: controller.checkUpdateForce, ), SizedBox(height: 20.h), TDButton( width: double.infinity, text: "下载失败后重试", theme: TDButtonTheme.primary, size: TDButtonSize.large, onTap: controller.showRetryDialogTip, ), ​ TDButton( width: double.infinity, text: "延迟更新", theme: TDButtonTheme.primary, size: TDButtonSize.large, onTap: controller.timerUpdateTask, ), ], )) ) ); } } ​

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询