Flutter 项目 app迭代更新
大概思路,能进入这个帖子基本也都知道:
1.获取当前版本是否为低版本(略)
2.更新
方法一:
直接使用url_launcher:跳转本地浏览器下载
需要依赖url_launcher,版本号没有要求
url_launcher: ^5.0.2
currUrl:为下载地址
_UpdateURL() async {if (await canLaunch(currUrl)) {await launch(currUrl);} else {throw 'Could not launch $currUrl';}}
方法二:
使用到的库,pubspec .yaml配置
分别是下载文件,获取路径,权限,打开文件
flutter_downloader: ^1.1.7path_provider: ^1.1.0permission_handler: ^3.0.0open_file: ^2.0.1+2
Android manifest.xml配置
flutter_downloader:https://pub.dev/packages/flutter_downloader
⚠️:IOSIOS配置会有不同
<providerandroid:name="vn.hunghd.flutterdownloader.DownloadedFileProvider"android:authorities="${applicationId}.flutter_downloader.provider"android:exported="false"android:grantUriPermissions="true"><meta-dataandroid:name="android.support.FILE_PROVIDER_PATHS"android:resource="@xml/provider_paths"/></provider><providerandroid:name="androidx.work.impl.WorkManagerInitializer"android:authorities="${applicationId}.workmanager-init"android:enabled="false"android:exported="false" /><providerandroid:name="vn.hunghd.flutterdownloader.FlutterDownloaderInitializer"android:authorities="${applicationId}.flutter-downloader-init"android:exported="false"><meta-dataandroid:name="vn.hunghd.flutterdownloader.MAX_CONCURRENT_TASKS"android:value="5" /></provider>
查看是否有权限
// 检查权限Future<bool> _checkPermission() async {if (Theme.of(context).platform == TargetPlatform.android) {PermissionStatus permission = await PermissionHandler().checkPermissionStatus(PermissionGroup.storage);if (permission != PermissionStatus.granted) {Map<PermissionGroup, PermissionStatus> permissions =await PermissionHandler().requestPermissions([PermissionGroup.storage]);if (permissions[PermissionGroup.storage] == PermissionStatus.granted) {return true;}} else {return true;}} else {return true;}return false;}
下载apk
把apk放在某位置,进行请求下载
void _requestDownload() async {final path = await _apkLocalPath;final taskId = await FlutterDownloader.enqueue(url: 'https://github.com/alibaba/flutter-go/raw/master/FlutterGo.apk',savedDir: path,showNotification: true,// show download progress in status bar (for Android)openFileFromNotification:true, // click on notification to open downloaded file (for Android));}
监听下载进度
⚠️这里写在initState()方法中
FlutterDownloader.registerCallback((id, status, progress) async {setState(() {_currProgress = progress;});print("id:${id}===== status=======:${status}=====progress======:${progress}");// 当下载完成时,调用安装if (status == DownloadTaskStatus.complete) {OpenFile.open(_localPath);FlutterDownloader.open(taskId: id);}});
ok 重点基本就到这里了,真机测
附上全部代码测试:
import 'dart:io';import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_go/blocs/bak/search_api.dart';
import 'dart:convert';
import 'package:flutter_downloader/flutter_downloader.dart';
import 'package:path_provider/path_provider.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:open_file/open_file.dart';
import 'package:url_launcher/url_launcher.dart';class UpdatePage extends StatefulWidget {@override_UpdatePageState createState() => _UpdatePageState();
}class _UpdatePageState extends State<UpdatePage> {static const currUrl ='https://github.com/alibaba/flutter-go/raw/master/FlutterGo.apk';@overridevoid initState() {super.initState();FlutterDownloader.registerCallback((id, status, progress) async {setState(() {_currProgress = progress;});print("id:${id}===== status=======:${status}=====progress======:${progress}");// 当下载完成时,调用安装if (status == DownloadTaskStatus.complete) {OpenFile.open(_localPath);FlutterDownloader.open(taskId: id);}});_permissisonReady = false;_prepare();}bool _isLoading;bool _permissisonReady;String _localPath;int _currProgress = 0;@overrideWidget build(BuildContext context) {return Column(children: <Widget>[Container(margin: EdgeInsets.only(top: 20),width: double.infinity,height: 10.0,child: new LinearProgressIndicator(value: _currProgress / 100,backgroundColor: Colors.red,),),Center(child: Text("现在是1.0.0",textAlign: TextAlign.center, style: TextStyle(fontSize: 20)),),Center(child: FlatButton(onPressed: () {print("点击${_permissisonReady}");if (_permissisonReady) {_requestDownload();} else {_checkPermission().then((hasGranted) {setState(() {_permissisonReady = hasGranted;});});}},child: Text("点击获取新版本",style: TextStyle(color: Colors.white),),color: Colors.red[800],),),Center(child: FlatButton(onPressed: () {print("local===: _UpdateURL");_UpdateURL();},child: Text("更新版本",style: TextStyle(color: Colors.white),),color: Colors.red[800],),),],);}_UpdateURL() async {if (await canLaunch(currUrl)) {await launch(currUrl);} else {throw 'Could not launch $currUrl';}}Future<Null> _prepare() async {_permissisonReady = await _checkPermission();}//检查权限Future<bool> _checkPermission() async {if (Theme.of(context).platform == TargetPlatform.android) {PermissionStatus permission = await PermissionHandler().checkPermissionStatus(PermissionGroup.storage);if (permission != PermissionStatus.granted) {Map<PermissionGroup, PermissionStatus> permissions =await PermissionHandler().requestPermissions([PermissionGroup.storage]);if (permissions[PermissionGroup.storage] == PermissionStatus.granted) {return true;}} else {return true;}} else {return true;}return false;}void _requestDownload() async {final path = await _apkLocalPath;final taskId = await FlutterDownloader.enqueue(url: currUrl,fileName: "new_FlutterGo.apk",savedDir: path,showNotification: true,// show download progress in status bar (for Android)openFileFromNotification:true, // click on notification to open downloaded file (for Android));}// 获取安装地址Future<String> get _apkLocalPath async {// final directory = widget.platform == TargetPlatform.android
// ? await getExternalStorageDirectory()
// : await getApplicationDocumentsDirectory();final directory = await getExternalStorageDirectory();_localPath = directory.path.toString();return _localPath;}
}
Flutter 项目 app迭代更新相关推荐
- flutter APP自动更新
flutter APP自动更新 前言 在pubspec.yaml中安装依赖 在main.dart文件中,初始化FlutterDownLoader 配置网络 在AndroidManifest.xml新增 ...
- 最新网站生成APP源代码+Flutter项目/带控制端
正文: 网站转换APP源代码,WebAPP源代码,网站生成APP源代码,Flutter项目+带控制端,这是一个功能超级强大的系统源码,演示图非常多,有兴趣自己看吧. 这是一款网站转换成APP的源代码, ...
- WordPress+Flutter开发APP教程:2.创建项目
说明 本小节教程,将教您如何使用 Android Studio 创建一个 APP 目录 说明 开始 1.打开 Android Studio,并点击 新建flutter 项目 如下: 2.选flutte ...
- maven 强制更新_Android App内部更新Library的方法
超详细!安卓巴士开发者大会嘉宾及主题介绍 AutoUpdateProject 最新版本及说明请关注GitHub,欢迎Star. 有什么意见与建议欢迎交流! github地址: https://gith ...
- flutter和webapp_Flutter全平台!迁移现有Flutter项目到WEB端
写在前面 Flutter 是 Google推出并开源的移动应用开发框架,主打跨平台.高保真.高性能.开发者可以通过 Dart语言开发 App,一套代码同时运行在 iOS .Android.web和桌面 ...
- flutter不支持热更新_Flutter 在安卓上可以实现热更新了
本文由 句号君 授权投稿 原文链接:https://blog.csdn.net/qizewei123/article/details/102963340 Flutter 官方在 GitHub 上声明是 ...
- Flutter 项目开发指导 从基础入门到精通使用目录
Flutter 从入门 到精通系列文章 本文章为 Flutter 开发中的经验积累分享.教程分享.开发笔记分享目录,持续维护中. 题记 -- 执剑天涯,从你的点滴积累开始,所及之处,必精益求精. Fl ...
- Flutter学习笔记02:初探Flutter项目
文章目录 一.创建Flutter项目 二.项目目录文件说明 (一)android目录 (二)ios目录 (三)lib目录 (四)test目录 (五)pubspec.yaml文件 三.调试运行App ( ...
- Flutter系列(二)flutter项目打安装包
一.安卓应用的apk安装包 推荐原文:AndroidStudio中Flutter打包APK - niceyoo - 博客园 (cnblogs.com) 学习后,整理记录一下步骤: 1.生成key 注意 ...
最新文章
- 厦门诺宝机器人_诺宝机器人编程软件
- 一、简谈Pandas
- QT的QStatusBar类的使用
- linux系统基础优化小结
- Linux系统下与终端相关的命令
- wx.checkjsapi是写在config里面吗_用Python写一个程序,解密游戏内抽奖的秘密
- 结束 Java、Python 之战,如何学习所有编程语言?
- 恢复初始快捷键_如何将Windows10系统还原初始状态
- 孙茂松教授——自然语言处理一瞥:知往鉴今瞻未来
- 并行程序设计---cuda memory
- 第二周函数-的基本格式:
- oracle数据库查表创建语句,转载:如何查看Oracle数据表的建表语句?
- 2005-2020POI数据 高德POI数据 高德信息点数据 百度POI数据分析下载
- 经典面试题:手机扫描二维码的测试用例(建议收藏)
- ​以数据科学家的眼光投资,你可能会一夜暴富
- iOS 播放系统自带铃声
- Unity导入图片尺寸大小和压缩格式的问题
- redis连接与关闭
- python最大公约数计算的程序代码_Python实现的求解最大公约数算法示例
- 糖尿病新世界杂志糖尿病新世界杂志社糖尿病新世界编辑部2022年第12期目录