update_model.dart 9.21 KB
import 'dart:convert';
import 'dart:io';
import 'dart:math';

import 'package:common_utils/common_utils.dart';
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:install_plugin/install_plugin.dart';
import 'package:one_key/constant/constant.dart';
import 'package:one_key/models/version.dart';
import 'package:one_key/net/base_resp.dart';
import 'package:one_key/net/dio_util.dart';
import 'package:one_key/net/http_url.dart';
import 'package:one_key/provider/user_model.dart';
import 'package:one_key/res/colors.dart';
import 'package:one_key/utils/utils.dart';
import 'package:one_key/widgets/MyDivider.dart';
import 'package:one_key/widgets/v_empty_view.dart';
import 'package:path_provider/path_provider.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:provider/provider.dart';

class UpdateModel {
  int _progress; //下载进度
  Function _setState;
  //检查更新
  checkUpdate(BuildContext context,{showToast=true}) async {
    String deviceId = await Utils.getUUID();
    UserModel userModel = Provider.of<UserModel>(context, listen: false);
    int versionCode = await Utils.getCurrBuildNum();
    String make="3";
    if(Platform.isIOS)make="4";
    Map<String, String> params = {
      "deviceId": deviceId,
      "sid": userModel.user.sellerid,
      "versionCode": versionCode.toString(),
      "flag":"4",
      "make":make,//3 android 4 ios
    };
    BaseResp<List> baseResp = await DioUtil()
        .request<List>(context, Method.get, HttpUrl.check_update, data: params,showLoading: false)
        .catchError((error) {
      print(error.toString());
      if(showToast){
        Utils.showToast("当前已是最新版本");
      }
    });
    if (baseResp!=null&&baseResp.code == Constant.status_success) {
      LogUtil.v(baseResp.data);
      Map<String, dynamic> dataMap = baseResp.data[0];
      if (int.parse(dataMap["version"].toString()) > versionCode) {
        Version version = Version.fromJson({
          "name":dataMap["name"].toString(),
          "version": dataMap["version"].toString(),
          "file_url":dataMap["file_url"].toString(),
          "content": dataMap["content"].toString()
        });
        showUpdateDialog(context, version);
      }else{
        if(showToast){
          Utils.showToast(baseResp?.msg??"当前已是最新版本");
        }
      }
    }else{
      if(showToast){
        Utils.showToast(baseResp?.msg??"当前已是最新版本");
      }

    }
//    if(Platform.isAndroid){
//
//    }else{
////      Response response=await DioUtil().getDio().get("http://itunes.apple.com/lookup?id=1510697490");
////      Map<String,dynamic> dataMap=jsonDecode(response.data);
////      String version=((dataMap["results"] as List)[0] as Map)["version"] as String;
////      String currVersion=await Utils.getCurrVersion();
////      if(version.compareTo(currVersion)>0){
////        Version version = Version.fromJson({
////          "version": "version",
////          "file_url":dataMap["file_url"],
////          "content": dataMap["content"]
////        });
////        showUpdateDialog(context, version);
////      }
//    }
  }

  //版本更新弹框
  showUpdateDialog(BuildContext pageContext, Version version) {
    showDialog(
        context: pageContext,
        builder: (context) {
          Widget widget = Container(
            decoration: BoxDecoration(
                color: MyColours.color_ffffff,
                borderRadius: BorderRadius.all(
                    Radius.circular(ScreenUtil().setWidth(30)))),
            padding: EdgeInsets.only(top: ScreenUtil().setWidth(50)),
            child: Column(
              mainAxisSize: MainAxisSize.min,
              crossAxisAlignment: CrossAxisAlignment.start,
              children: <Widget>[
                Container(
                  padding: EdgeInsets.symmetric(
                      horizontal: ScreenUtil().setWidth(60)),
                  child: Column(
                    mainAxisSize: MainAxisSize.min,
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: <Widget>[
                      Center(
                        child: Text(
                          "${version.name}版本更新啦",
                          style: TextStyle(
                              fontSize: ScreenUtil().setSp(36),
                              color: MyColours.color_353535),
                        ),
                      ),
                      VEmptyView(20),
                      Text(
                        version.content,
                        style: TextStyle(
                            fontSize: ScreenUtil().setSp(28),
                            color: MyColours.color_353535),
                      )
                    ],
                  ),
                ),
                VEmptyView(40),
                MyDivider(double.infinity, ScreenUtil().setWidth(1)),
                Container(
                  height: ScreenUtil().setWidth(94),
                  child: Row(
                    children: <Widget>[
                      Expanded(
                        child: GestureDetector(
                          onTap: () {
                            Navigator.of(context).pop();
                          },
                          child: Text(
                            "下次一定",
                            style: TextStyle(
                                fontSize: ScreenUtil().setSp(34),
                                color: MyColours.color_777777),
                            textAlign: TextAlign.center,
                          ),
                        ),
                      ),
                      MyDivider(
                          ScreenUtil().setWidth(1), ScreenUtil().setWidth(94)),
                      Expanded(
                        child: GestureDetector(
                          onTap: () {
                            Navigator.of(context).pop();
                            if (Platform.isAndroid) {
                              downloadApk(pageContext, version.file_url);
                            } else {
                              InstallPlugin.gotoAppStore(
                                  "itms-apps://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=1510697490");
                            }
                          },
                          child: Text(
                            "立即更新",
                            style: TextStyle(
                                fontSize: ScreenUtil().setSp(34),
                                color: MyColours.color_2bb5b7),
                            textAlign: TextAlign.center,
                          ),
                        ),
                      )
                    ],
                  ),
                )
              ],
            ),
          );
          return Center(
            child: UnconstrainedBox(
              constrainedAxis: Axis.vertical,
              child: ConstrainedBox(
                  constraints:
                      BoxConstraints(maxWidth: ScreenUtil().setWidth(560)),
                  child: DefaultTextStyle(
                    style: TextStyle(decoration: TextDecoration.none),
                    child: widget,
                  )),
            ),
          );
          return AlertDialog(
            content: widget,
            contentPadding: EdgeInsets.zero,
          );
        });
  }

  //下载更新版本
  Future<void> downloadApk(BuildContext context, String file_url) async {
    Map<PermissionGroup, PermissionStatus> permissions =
        await PermissionHandler().requestPermissions([PermissionGroup.storage]);
    if (permissions[PermissionGroup.storage] == PermissionStatus.granted) {
      final dir = await getExternalStorageDirectory();
      String savePath = dir.path + "/one_key";
      Directory directory = new Directory(savePath);
      if (directory.existsSync()) {
        //删除历史apk
        final List<FileSystemEntity> files = directory.listSync();
        for (FileSystemEntity file in files) {
          file.deleteSync();
        }
      }
      showDownloadProgress(context);
      DioUtil().download(file_url, savePath, onProgress: (received, total) {
        if (_progress != 100) {
          int progress = ((received / total) * 100).round();
          _progress = progress;
          _setState(() {});
        }
        if (received == total) {
          //下载完成
          InstallPlugin.installApk(savePath, "com.naji.one_key");
        }
      });
    }
  }

  //显示下载进度条
  showDownloadProgress(BuildContext context) {
    showDialog(
        context: context,
        barrierDismissible: false,
        builder: (ct) {
          return AlertDialog(
              content: StatefulBuilder(builder: (context, setState) {
            if (_progress == 100) {
              Navigator.of(ct).pop();
            }
            _setState = setState;
            return Column(
              mainAxisSize: MainAxisSize.min,
              children: <Widget>[
                CircularProgressIndicator(),
                Padding(
                  padding: EdgeInsets.only(top: 26),
                  child: Text("正在下载...${_progress}%"),
                )
              ],
            );
          }));
        });
  }
}