update_model.dart 7.01 KB
import 'dart:io';
import 'dart:math';

import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:install_plugin/install_plugin.dart';
import 'package:one_key/models/version.dart';
import 'package:one_key/net/dio_util.dart';
import 'package:one_key/res/colors.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';

class UpdateModel {
  int _progress; //下载进度
  Function _setState;
  //检查更新
  checkUpdate(BuildContext context) {
    Future.delayed(new Duration(milliseconds: 1000), () {
      if (Random().nextInt(10) > 0) {
        Version version = Version.fromJson({
          "version": "v1.0.3",
          "file_url":
              "http://xt03.colorcun.com/uploads/20191105/67e38355c41528b24a97e9ac71a221ea.apk",
          "content": "1.bug修复;\n2.功能更新;"
        });
        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.version}版本更新啦",
                          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}%"),
                )
              ],
            );
          }));
        });
  }
}