import 'dart:convert'; import 'package:apk_update/utils/toast_util.dart'; import 'package:apk_update/widget/update_dialog.dart'; import 'package:dio/dio.dart'; import 'package:flustars_flutter3/flustars_flutter3.dart'; import 'package:flutter/material.dart'; import 'package:get/route_manager.dart'; import 'package:url_launcher/url_launcher.dart'; // 获取版本号 const String getSystemVersionByNumber = "/user-service/system/version/getSystemVersionByNumber"; const currentDay = "current_day"; const dateFormat = "yyyy-MM-dd"; /// 获取更新版本信息 /// url 请求地址 /// versionNumber 当前应用versionCode /// productNo 产品号 /// onceDay 一天提示一次(应用首页设置true) void checkVersion({ required String url, required int versionNumber, required int productNo, bool onceDay = false, Function()? jumpAppStore, // 跳转AppStore Function(String? path)? installApk, // 安装Apk Function()? downloadApkError, // 下载Apk错误 }) async { try { final Response response = await Dio().request( url, options: Options(method: 'GET'), queryParameters: { "versionNumber": versionNumber, "productNo": productNo, }, ); // 网络请求成功 var responseData = response.data; var requestOptions = response.requestOptions; var headers = response.headers; debugPrint("========== 网络请求成功 ==========\n" "path:${requestOptions.path}\n" "method:${requestOptions.method}\n" "queryParameters:${requestOptions.queryParameters}\n" "headers:${headers.map}\n\n" "responseData:$responseData\n"); if (responseData.runtimeType == String) { // 兼容后端数据返回string responseData = json.decode(responseData); } if (responseData?["code"] != 0) { ToastUtil.showToast(responseData?["msg"]); return; } var result = responseData?["data"]; //获取当前时间 String spCurrent = SpUtil.getString(currentDay) ?? ""; String current = DateUtil.formatDate(DateTime.now(), format: dateFormat); //一天提示一次升级 & 非强升 & 当天已提示 => 不再提示 if (onceDay && result?['versionForce'] == 0 && spCurrent == current) { // 不再提示 return; } //缓存当前时间 SpUtil.putString(currentDay, current); // 一天提示一次升级,是在应用首次设置,不需要提示最新版本toast if (!onceDay && result == null) { // 当前已经是最新版本 ToastUtil.showToast("当前已经是最新版本"); return; } if (result == null) { // 无升级任务,拦截 return; } // 升级弹框提示 Get.dialog( UpdateDialog( title: result['versionName'], content: result['versionContent'], isUpdateMore: result['versionForce'] == 1, versionPath: result['versionPath'], jumpAppStore: jumpAppStore, installApk: installApk, downloadApkError: downloadApkError, ), ); } on DioException catch (e) { debugPrint( "===== 网络请求错误:${e.response?.statusCode} ${e.response?.statusMessage}"); } } /// 打开浏览器 Future<void> openBrowser(String stringUrl) async { final Uri url = Uri.parse(stringUrl); if (!await launchUrl(url, mode: LaunchMode.externalApplication)) { throw Exception('Could not launch $url'); } }