flutter 更新apk

avatar
作者
猴君
阅读量:0
import 'package:path_provider/path_provider.dart';   //app_installer: ^1.0.0 import 'package:app_installer/app_installer.dart';    //path_provider   //查询是否更新   Future<void> ifUpdate(BuildContext buildContext) async {     String jsonFlag = await LocalStorage.get("apkJson");     var s = jsonFlag;     var dio = Dio();     final response = await dio.get(s);     print(response.data);     if(response.data != null){       setState(() {        });       apkJson = response.data;   //json格式{"version":"3.0.1","outputFile":"http://192.168.200.201/test/news.apk","versionName":"ydhl"}     }     PackageInfo packageInfo = await PackageInfo.fromPlatform();     //如果你设置的版本号 于你本机上的App的版本号 不一致 弹出下载框     if (apkJson["version"] != "packageInfo.version") {       print(packageInfo.version);       Msg.dlg(context: context,title: "版本不是最新版,请确定是否更新").then((value)=>{         if(value == ""){           _installApk(apkJson["outputFile"])           // download2()         }       });     }else{       toast("已是最新版");     }   }
/// 下载安卓更新包   Future downloadAndroid(String url) async {     /// 创建存储文件     Directory storageDir = await getExternalStorageDirectory();     String storagePath = storageDir.path;     final directory = await getTemporaryDirectory();     File file = new File("${storageDir.path}/ydhl.apk");      if (!file.existsSync()) {       file.createSync();     }     try {       /// 发起下载请求        Response response = await Dio().download(url,file.path,           options: Options(             followRedirects: false,           ),onProgress: (int count, int total){             if (total != -1) {               //更新界面进度               _value = count / total;               print("------"+_value.toString());               setState(() {                 _value =_value;               });             }           });       // file.writeAsBytesSync(response.data);       return file;     } catch (e) {       showError("下载失败");       debugPrint(e.toString());       setState(() {        });     }   }
/// 安装apk   Future _installApk(String url) async {     File _apkFile = await downloadAndroid(url);     String _apkFilePath = _apkFile.path;      if (_apkFilePath.isEmpty) {       print("make sure the apk file is set");       return;     }     AppInstaller.installApk(_apkFilePath)         .then((ell){       toast("下载成功");     }).catchError((e){       showError("install apk error: $e");     });   }

 更新界面

与界面都在stack中

Visibility(           visible: (_value*100).toInt() != 0 && (_value*100).toInt() != 100,           child: Stack(             children: [               Container(                 height: double.infinity,                 width: double.infinity,                 color: Colors.black12,               ),               Center(                 child: Column(                   mainAxisAlignment: MainAxisAlignment.center,                   crossAxisAlignment: CrossAxisAlignment.center,                   children: [                     Container(                       child: Text("下载中...",style: TextStyle(                         color: Colors.blue,                           decoration: TextDecoration.none                       ),),                     ),                     SizedBox(height: 10,),                     SizedBox(                       height: 20,                       width: 300,                       child: ClipRRect(                         borderRadius: const BorderRadius.all(Radius.circular(100)),                         child: LinearProgressIndicator(                           value: _value,                           backgroundColor: const Color(0xFF7E7F88).withOpacity(0.15),                           valueColor: const AlwaysStoppedAnimation<Color>(Colors.green),                         ),                       ),                     ),                   ],                 ),               ),             ],           ),         ),

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!