Flutterchimera

一个简单的Flutter APP 升级方法

2019-08-06  本文已影响0人  怪我难拥人心_d2be

在我们开发app的时候,app的版本升级是必不可少的,那么在flutter中我们该如何实现这个需求呢?下面带来一个简单的Flutter App版本升级方法

首先我们需要几个插件:
flutter_downloader 链接:https://pub.flutter-io.cn/packages/flutter_downloader
dio 链接:https://pub.flutter-io.cn/packages/dio
path_provider 链接:https://pub.flutter-io.cn/packages/path_provider
open_file 链接:https://pub.flutter-io.cn/packages/open_file

将以上4个插件添加到pubspec.yaml中

首先我们需要获取apk的存放位置,因为我们下载最新版的apk时,需要一个路径来存放apk。
引用path_provider插件

import 'package:path_provider/path_provider.dart';

然后创建_apkLocalPath函数

// 获取apk存放地址(外部路径)
  Future<String> get _apkLocalPath async {
    final directory = await getExternalStorageDirectory();
    return directory.path;
  }

第二步,我们需要创建apk安装函数,引用open_file插件,

import 'package:open_file/open_file.dart';
///安装app
  Future<Null> _installApk() async {
    String path = await _apkLocalPath;
    await OpenFile.open(path + '/' + apkName);
  }

第三步,创建下载函数0v0,引用flutter_downloaderdio插件,

import 'package:dio/dio.dart';
import 'package:flutter_downloader/flutter_downloader.dart';
 /// 下载
  Future<void> executeDownload() async {
    //apk存放路径
    final path = await _apkLocalPath;
    //获取版本
    var result = await Dio()
        .get("https://jderp.3mzz.cn/update/app/version.txt")
        .catchError((e) {
      print('获取版本号失败==》' + e);
    });
    apkName = '测试' + result.toString() + '.apk';
    File file = File(path + '/' + apkName);
    if (await file.exists()) await file.delete();

    //下载
    final taskId = await FlutterDownloader.enqueue(
        url: 'xxxx',//下载最新apk的网络地址
        savedDir: path,
        fileName: apkName,
        showNotification: true,
        openFileFromNotification: true);
    FlutterDownloader.registerCallback((id, status, progress) {
      // 当下载完成时,调用安装
      if (taskId == id && status == DownloadTaskStatus.complete) {
        _installApk();
      }
    });
  }

在你需要的地方调用executeDownload即可,
下面是全部代码

import 'dart:io';
import 'package:dio/dio.dart';
import 'package:flutter_downloader/flutter_downloader.dart';
import 'package:path_provider/path_provider.dart';
import 'package:open_file/open_file.dart';

///版本升级
class VersionUpgrade {
  String apkName;

// 获取apk存放地址(外部路径)
  Future<String> get _apkLocalPath async {
    final directory = await getExternalStorageDirectory();
    return directory.path;
  }

  /// 下载
  Future<void> executeDownload() async {
    final path = await _apkLocalPath;
    var result = await Dio()
        .get("https://jderp.3mzz.cn/update/app/version.txt")
        .catchError((e) {
      print('获取版本号失败==》' + e);
    });
    apkName = 'xxx' + result.toString() + '.apk';
    File file = File(path + '/' + apkName);
    if (await file.exists()) await file.delete();

    //下载
    final taskId = await FlutterDownloader.enqueue(
        url: 'https://jderp.3mzz.cn/update/app/jderp.apk',
        savedDir: path,
        fileName: apkName,
        showNotification: true,
        openFileFromNotification: true);
    FlutterDownloader.registerCallback((id, status, progress) {
      // 当下载完成时,调用安装
      if (taskId == id && status == DownloadTaskStatus.complete) {
        _installApk();
      }
    });
  }

  ///安装app
  Future<Null> _installApk() async {
    String path = await _apkLocalPath;
    await OpenFile.open(path + '/' + apkName);
  }
}

上一篇 下一篇

猜你喜欢

热点阅读