1+ import 'dart:io' ;
2+
3+ import 'package:dio/dio.dart' ;
14import 'package:fluro/fluro.dart' ;
25import 'package:flutter/material.dart' ;
36import 'package:flutter/cupertino.dart' ;
7+ import 'package:flutter_picgo/api/picgo_api.dart' ;
48import 'package:flutter_picgo/routers/application.dart' ;
59import 'package:flutter_picgo/routers/routers.dart' ;
610import 'package:flutter_picgo/utils/local_notification.dart' ;
711import 'package:flutter_picgo/utils/shared_preferences.dart' ;
12+ import 'package:package_info/package_info.dart' ;
813import 'package:toast/toast.dart' ;
14+ import 'package:url_launcher/url_launcher.dart' ;
915
1016class 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