flutter app版本更新
2020-01-21 本文已影响0人
冰点雨
本来想做从服务器下载安装包自动下载安装的。
使用flutter_downloader: ^1.1.7下载的时候,插件报错,还未解决。先做打开链接自己下载吧。
实现的步骤:
1.配置AndroidMenifest.xml文件
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
2.在pubspec.yaml添加sdk
dependencies:
...
cupertino_icons: ^0.1.0
package_info: ^0.4.0+13 #获取版本信息
3..第一次打开APP时执行"版本更新"的网络请求
class DashboardPageState extends State<DashboardPage>{
var serviceVersionCode;
@override void initState() {
super.initState();
_getNewVersionAPP();//"版本更新"的异步请求
}
//异步请求
Future _getNewVersionAPP() async {
String url = url;
DioUtil.get(url).then((response) {
if (response != null) {
setState(() {
var data = response.data;
serviceVersionCode = data["versionCode"];//获取[服务器的versionCode _checkVersionCode(); //升级app版本的方法
});
}
});
}
}
4.比较服务器的版本号跟当前的版本号,来判断要不要升级APP应用程序
void _checkVersionCode() {
PackageInfo.fromPlatform().then((PackageInfo packageInfo) {
var currentVersionCode = packageInfo.version;//获取当前的版本号
//如果获取服务器的版本号比当前应用程序的版本号还高,那么提示升级
if (serviceVersionCode > currentVersionCode) {
_showNewVersionAppDialog();//弹出"版本更新"的对话框
}
});
}
5.弹出“版本更新”对话框
Future<void> _showNewVersionAppDialog() async {
return showDialog<void>(
context: context,
barrierDismissible: false,
builder: (BuildContext context) {
return AlertDialog(
title: new Row(
children: <Widget>[
new Image.asset("images/ic_launcher_icon.png",
height: 35.0, width: 35.0),
new Padding(
padding: const EdgeInsets.fromLTRB(30.0, 0.0, 10.0, 0.0),
child: new Text("项目名称",
style: dialogButtonTextStyle))
],
),
content: new Text(
'版本更新',
style: dialogTextStyle),
actions: <Widget>[
new FlatButton(
child: new Text('Later', style: dialogButtonTextStyle),
onPressed: () {
Navigator.of(context).pop();
},
),
new FlatButton(
child: new Text('DownLoad', style: dialogButtonTextStyle),
onPressed: () {
_goToGooglePlay();//到Google Play官网去下载APK
},
)
],
);
});
}
6.到Google Play官网去下载APK
void _goToGooglePlay() {
Navigator.of(context).push(new MaterialPageRoute(builder: (context) {
return new CommonWebViewPage(
url:
"https://play.google.com/store/apps/details?id=项目包名");
}));
}