Flutter项目:应用程序版本更新

版本更新目录

1、版本更新步骤

2、获取当前应用版本号

3、检查服务器版本

 4、比较版本

5、提示用户有版本更新(提示组件)

6、申请安装权限

第一步:配置权限

第二步:申请权限

7、下载APK,进度条组件

进度条组件:

第一步:获取存储目录

 第二步:下载apk并显示进度条

第三步:安装APK


2、获取当前应用版本号

插件:package_info_plus

插件地址:package_info_plus | Flutter packageFlutter plugin for querying information about the application package, such as CFBundleVersion on iOS or versionCode on Android.https://pub.dev/packages/package_info_plus

//获取当前版本
  static Future<String> getVersion() async {
    PackageInfo packageInfo = await PackageInfo.fromPlatform();
    String version = packageInfo.version;
    return version;
  }

3、检查服务器版本

后端有个version.jsong

[{
  "current": true,
  "All": {
  "title": "发现新版本",
  "version": "1.0.1",
  "uptype": "min",
  "contentTitle": "应用名称 v1.0.1",
  "content": "1、各种Bug修复。",
  "downUrl": "https://xxxx/xxxx/dy_drive_v1.0.1.apk"
  }
  }]

通过请求获取服务器版本

Future<Map<String, dynamic>> getLatesVersionInfo() async {
    final result = await _dio.get(
       https://xxxx/xxx/version.json + '?_t=' + _time.toString(),
    );
   Map<String, dynamic> lastRes = result.data.firstWhere(
      (item) => item['current'] == true,
      orElse: () => null,
   );
   return lastRes["All"];
}

 插件:dio

插件地址:

dio | Dart packageA powerful HTTP networking package,supports Interceptors,Aborting and canceling a request,Custom adapters, Transformers, etc.https://pub.dev/packages/dio

 4、比较版本

int result = compareVersions(
   latesVersionInfo["version"],
   currentVersion,
);
int compareVersions(String v1, String v2) {
    List<int> getVersionComponents(String version) {
      return version.split('.').map((e) => int.parse(e)).toList();
    }

    List<int> v1Components = getVersionComponents(v1);
    List<int> v2Components = getVersionComponents(v2);

    int minLength = v1Components.length < v2Components.length
        ? v1Components.length
        : v2Components.length;

    for (int i = 0; i < minLength; i++) {
      if (v1Components[i] > v2Components[i]) return 1;
      if (v1Components[i] < v2Components[i]) return -1;
    }

    if (v1Components.length > v2Components.length &&
        v1Components[minLength] != 0)
      return 1;
    if (v1Components.length < v2Components.length &&
        v2Components[minLength] != 0)
      return -1;

    return 0;
  }
  • result > 0 :需要更新版本
  • result = 0 :已是最新版本
  • result < 0 :版本号不对

5、提示用户有版本更新(提示组件)

自己写了一个版本更新提示框

import 'package:dy_driver/config/colors.dart';
import 'package:dy_driver/utils/toast_utils.dart';
import 'package:dy_driver/utils/version_utils.dart';
import 'package:flutter/material.dart';
import 'package:dy_driver/utils/global_setting.dart';

class VersionOverlay {
  OverlayEntry? _overlayEntry;

  static final VersionOverlay _instance = VersionOverlay._internal();

  factory VersionOverlay() {
    return _instance;
  }

  VersionOverlay._internal();

  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值