From 740116e87319dedaedb2750bb205dee62d05af85 Mon Sep 17 00:00:00 2001 From: guozhigq Date: Sat, 19 Aug 2023 16:33:39 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=A3=80=E6=9F=A5=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/models/github/latest.dart | 3 ++ lib/pages/about/index.dart | 3 +- lib/pages/main/controller.dart | 12 +++++ lib/pages/setting/extra_setting.dart | 37 ++++++++++++++ lib/pages/setting/view.dart | 10 ++-- lib/pages/setting/widgets/switch_item.dart | 4 ++ lib/router/app_pages.dart | 4 +- lib/utils/storage.dart | 1 + lib/utils/utils.dart | 57 ++++++++++++++++++++++ 9 files changed, 123 insertions(+), 8 deletions(-) create mode 100644 lib/pages/setting/extra_setting.dart diff --git a/lib/models/github/latest.dart b/lib/models/github/latest.dart index 1b2d0706..8730a4ba 100644 --- a/lib/models/github/latest.dart +++ b/lib/models/github/latest.dart @@ -4,12 +4,14 @@ class LatestDataModel { this.tagName, this.createdAt, this.assets, + this.body, }); String? url; String? tagName; String? createdAt; List? assets; + String? body; LatestDataModel.fromJson(Map json) { url = json['url']; @@ -17,6 +19,7 @@ class LatestDataModel { createdAt = json['created_at']; assets = json['assets'].map((e) => AssetItem.fromJson(e)).toList(); + body = json['body']; } } diff --git a/lib/pages/about/index.dart b/lib/pages/about/index.dart index 66c66abb..04a5efec 100644 --- a/lib/pages/about/index.dart +++ b/lib/pages/about/index.dart @@ -6,7 +6,6 @@ import 'package:flutter/services.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; import 'package:package_info_plus/package_info_plus.dart'; -import 'package:path_provider/path_provider.dart'; import 'package:pilipala/http/index.dart'; import 'package:pilipala/models/github/latest.dart'; import 'package:pilipala/utils/utils.dart'; @@ -165,7 +164,7 @@ class AboutController extends GetxController { } } - // 获取啊当前版本 + // 获取当前版本 Future getCurrentApp() async { var result = await PackageInfo.fromPlatform(); currentVersion.value = result.version; diff --git a/lib/pages/main/controller.dart b/lib/pages/main/controller.dart index 1d2385e0..85150349 100644 --- a/lib/pages/main/controller.dart +++ b/lib/pages/main/controller.dart @@ -2,9 +2,12 @@ import 'dart:async'; import 'package:get/get.dart'; import 'package:flutter/material.dart'; +import 'package:hive/hive.dart'; import 'package:pilipala/pages/dynamics/index.dart'; import 'package:pilipala/pages/home/view.dart'; import 'package:pilipala/pages/media/index.dart'; +import 'package:pilipala/utils/storage.dart'; +import 'package:pilipala/utils/utils.dart'; class MainController extends GetxController { List pages = [ @@ -49,4 +52,13 @@ class MainController extends GetxController { ].obs; final StreamController bottomBarStream = StreamController.broadcast(); + Box setting = GStrorage.setting; + + @override + void onInit() { + super.onInit(); + if (setting.get(SettingBoxKey.autoUpdate, defaultValue: false)) { + Utils.checkUpdata(); + } + } } diff --git a/lib/pages/setting/extra_setting.dart b/lib/pages/setting/extra_setting.dart new file mode 100644 index 00000000..a46cefaf --- /dev/null +++ b/lib/pages/setting/extra_setting.dart @@ -0,0 +1,37 @@ +import 'package:flutter/material.dart'; +import 'package:pilipala/utils/storage.dart'; + +import 'widgets/switch_item.dart'; + +class ExtraSetting extends StatefulWidget { + const ExtraSetting({super.key}); + + @override + State createState() => _ExtraSettingState(); +} + +class _ExtraSettingState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + centerTitle: false, + titleSpacing: 0, + title: Text( + '其他设置', + style: Theme.of(context).textTheme.titleMedium, + ), + ), + body: ListView( + children: const [ + SetSwitchItem( + title: '检查更新', + subTitle: '每次启动时检查是否需要更新', + setKey: SettingBoxKey.autoUpdate, + defaultVal: false, + ), + ], + ), + ); + } +} diff --git a/lib/pages/setting/view.dart b/lib/pages/setting/view.dart index 0bddb809..677a4546 100644 --- a/lib/pages/setting/view.dart +++ b/lib/pages/setting/view.dart @@ -34,11 +34,11 @@ class SettingPage extends StatelessWidget { dense: false, title: const Text('外观设置'), ), - // ListTile( - // onTap: () {}, - // dense: false, - // title: const Text('其他设置'), - // ), + ListTile( + onTap: () => Get.toNamed('/extraSetting'), + dense: false, + title: const Text('其他设置'), + ), Obx( () => Visibility( visible: settingController.userLogin.value, diff --git a/lib/pages/setting/widgets/switch_item.dart b/lib/pages/setting/widgets/switch_item.dart index 6ae642d3..3e41e9ee 100644 --- a/lib/pages/setting/widgets/switch_item.dart +++ b/lib/pages/setting/widgets/switch_item.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:hive/hive.dart'; import 'package:pilipala/utils/storage.dart'; +import 'package:pilipala/utils/utils.dart'; class SetSwitchItem extends StatefulWidget { final String? title; @@ -61,6 +62,9 @@ class _SetSwitchItemState extends State { onChanged: (value) { val = value; Setting.put(widget.setKey, value); + if (widget.setKey == SettingBoxKey.autoUpdate && value == true) { + Utils.checkUpdata(); + } setState(() {}); }), ), diff --git a/lib/router/app_pages.dart b/lib/router/app_pages.dart index c1482f1a..f525e4e5 100644 --- a/lib/router/app_pages.dart +++ b/lib/router/app_pages.dart @@ -16,6 +16,7 @@ import 'package:pilipala/pages/member/index.dart'; import 'package:pilipala/pages/preview/index.dart'; import 'package:pilipala/pages/search/index.dart'; import 'package:pilipala/pages/searchResult/index.dart'; +import 'package:pilipala/pages/setting/extra_setting.dart'; import 'package:pilipala/pages/setting/play_setting.dart'; import 'package:pilipala/pages/setting/privacy_setting.dart'; import 'package:pilipala/pages/setting/style_setting.dart'; @@ -80,7 +81,8 @@ class Routes { GetPage(name: '/styleSetting', page: () => const StyleSetting()), // 隐私设置 GetPage(name: '/privacySetting', page: () => const PrivacySetting()), - + // 其他设置 + GetPage(name: '/extraSetting', page: () => const ExtraSetting()), // GetPage(name: '/blackListPage', page: () => const BlackListPage()), // 关于 diff --git a/lib/utils/storage.dart b/lib/utils/storage.dart index 7fd8b3a5..9c45deb7 100644 --- a/lib/utils/storage.dart +++ b/lib/utils/storage.dart @@ -119,6 +119,7 @@ class SettingBoxKey { static const String fullScreenMode = 'fullScreenMode'; static const String blackMidsList = 'blackMidsList'; + static const String autoUpdate = 'autoUpdate'; } class LocalCacheKey { diff --git a/lib/utils/utils.dart b/lib/utils/utils.dart index 4a539888..cb32b38e 100644 --- a/lib/utils/utils.dart +++ b/lib/utils/utils.dart @@ -4,8 +4,14 @@ import 'dart:async'; import 'dart:io'; import 'dart:math'; +import 'package:flutter/material.dart'; +import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get_utils/get_utils.dart'; +import 'package:package_info_plus/package_info_plus.dart'; import 'package:path_provider/path_provider.dart'; +import 'package:pilipala/http/index.dart'; +import 'package:pilipala/models/github/latest.dart'; +import 'package:url_launcher/url_launcher.dart'; class Utils { static Future getCookiePath() async { @@ -194,4 +200,55 @@ class Utils { } return false; } + + // 检查更新 + static Future checkUpdata() async { + SmartDialog.dismiss(); + var currentInfo = await PackageInfo.fromPlatform(); + var result = await Request().get(Api.latestApp); + LatestDataModel data = LatestDataModel.fromJson(result.data); + bool isUpdate = Utils.needUpdate(currentInfo.version, data.tagName!); + if (isUpdate) { + SmartDialog.show( + builder: (context) { + return AlertDialog( + title: const Text('🎉 发现新版本 '), + content: Column( + mainAxisSize: MainAxisSize.min, + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + data.tagName!, + style: const TextStyle(fontSize: 20), + ), + const SizedBox(height: 8), + Text(data.body!), + ], + ), + actions: [ + TextButton( + onPressed: () => SmartDialog.dismiss(), + child: Text( + '稍后', + style: + TextStyle(color: Theme.of(context).colorScheme.outline), + )), + TextButton( + onPressed: () async { + await SmartDialog.dismiss(); + launchUrl( + Uri.parse( + 'https://github.com/guozhigq/pilipala/releases'), + mode: LaunchMode.externalApplication, + ); + }, + child: const Text('去下载')), + ], + ); + }, + ); + } + return true; + } }