Skip to content

Commit b0cbcbb

Browse files
committed
feature:add in app updates
1 parent 02c65a6 commit b0cbcbb

File tree

2 files changed

+68
-1
lines changed

2 files changed

+68
-1
lines changed

lib/api/picgo_api.dart

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import 'package:dio/dio.dart';
2+
import 'package:flutter_picgo/utils/net.dart';
3+
4+
class PicgoApi {
5+
/// 获取App最新版本
6+
static Future getLatestVersion() async {
7+
Response res = await NetUtils.getInstance().get(
8+
'https://cdn.jsdelivr.net/gh/PicGo/flutter-picgo@dev/docs/version.json');
9+
return res;
10+
}
11+
}

lib/views/picgo_setting_page/picgo_setting_page.dart

Lines changed: 57 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,17 @@
1+
import 'dart:io';
2+
3+
import 'package:dio/dio.dart';
14
import 'package:fluro/fluro.dart';
25
import 'package:flutter/material.dart';
36
import 'package:flutter/cupertino.dart';
7+
import 'package:flutter_picgo/api/picgo_api.dart';
48
import 'package:flutter_picgo/routers/application.dart';
59
import 'package:flutter_picgo/routers/routers.dart';
610
import 'package:flutter_picgo/utils/local_notification.dart';
711
import 'package:flutter_picgo/utils/shared_preferences.dart';
12+
import 'package:package_info/package_info.dart';
813
import 'package:toast/toast.dart';
14+
import 'package:url_launcher/url_launcher.dart';
915

1016
class PicGoSettingPage extends StatefulWidget {
1117
@override
@@ -17,6 +23,7 @@ class _PicGoSettingPageState extends State<PicGoSettingPage> {
1723
bool isTimestampRename = false;
1824
bool isUploadedTip = false;
1925
bool isForceDelete = false;
26+
bool isNeedUpdate = false;
2027

2128
@override
2229
void initState() {
@@ -33,6 +40,8 @@ class _PicGoSettingPageState extends State<PicGoSettingPage> {
3340
u?.getBool(SharedPreferencesKeys.settingIsForceDelete) ?? false;
3441
});
3542
});
43+
// update
44+
_getLatestVersion();
3645
}
3746

3847
@override
@@ -117,7 +126,20 @@ class _PicGoSettingPageState extends State<PicGoSettingPage> {
117126
// ),
118127
ListTile(
119128
title: Text('检查更新'),
120-
onTap: () {},
129+
onTap: () {
130+
_handleUpdateTap();
131+
},
132+
trailing: CircleAvatar(
133+
backgroundColor: Colors.transparent,
134+
child: Container(
135+
width: 8,
136+
height: 8,
137+
// color: Colors.red,
138+
decoration: BoxDecoration(
139+
color: isNeedUpdate ? Colors.red : Colors.transparent,
140+
borderRadius: BorderRadius.circular(4)),
141+
),
142+
),
121143
),
122144
],
123145
);
@@ -131,4 +153,38 @@ class _PicGoSettingPageState extends State<PicGoSettingPage> {
131153
instance.putBool(key, value);
132154
Toast.show('保存成功', context);
133155
}
156+
157+
_getLatestVersion() async {
158+
try {
159+
Response res = await PicgoApi.getLatestVersion();
160+
PackageInfo info = await PackageInfo.fromPlatform();
161+
int version = int.parse(info.buildNumber);
162+
debugPrint('$version');
163+
int remoteVersion = 0;
164+
if (Platform.isAndroid) {
165+
remoteVersion = int.parse('${res.data["Android"]["versionCode"]}');
166+
} else if (Platform.isIOS) {
167+
remoteVersion = int.parse('${res.data["iOS"]["versionCode"]}');
168+
}
169+
if (version < remoteVersion) {
170+
setState(() {
171+
this.isNeedUpdate = true;
172+
});
173+
}
174+
} catch (e) {
175+
print(e);
176+
}
177+
}
178+
179+
_handleUpdateTap() async {
180+
if (isNeedUpdate) {
181+
if (Platform.isAndroid) {
182+
launch('https://www.pgyer.com/flutter-picgo');
183+
} else if (Platform.isIOS) {
184+
launch('https://apps.apple.com/cn/app/flutter-picgo/id1519714305');
185+
}
186+
} else {
187+
Toast.show('当前已经是最新版本', context);
188+
}
189+
}
134190
}

0 commit comments

Comments
 (0)