diff --git a/lib/main.dart b/lib/main.dart index bf232a1..cdea469 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -3,7 +3,6 @@ import 'package:alist_flutter/pages/app_update_dialog.dart'; import 'package:alist_flutter/pages/settings/settings.dart'; import 'package:alist_flutter/pages/web/web.dart'; import 'package:alist_flutter/router.dart'; -import 'package:alist_flutter/utils/UpdateChecker.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_inappwebview/flutter_inappwebview.dart'; @@ -81,26 +80,10 @@ class _MyHomePageState extends State { @override void initState() { super.initState(); + WidgetsBinding.instance.addPostFrameCallback((_) async { - final checker = UpdateChecker(owner: "jing332", repo: "AListFlutter"); - await checker.downloadData(); - final hasNewVersion = await checker.hasNewVersion(); - if (hasNewVersion) { - showDialog( - context: context, - barrierDismissible: false, - barrierColor: Colors.black.withOpacity(0.5), - builder: (context) { - return AppUpdateDialog( - content: checker.getUpdateContent(), - apkUrl: checker.getApkDownloadUrl(), - htmlUrl: checker.getHtmlUrl(), - version: checker.getTag(), - ); - }); - } + AppUpdateDialog.checkUpdateAndShowDialog(context, null); }); - } @override diff --git a/lib/pages/alist/alist.dart b/lib/pages/alist/alist.dart index 147a6cb..69aaabc 100644 --- a/lib/pages/alist/alist.dart +++ b/lib/pages/alist/alist.dart @@ -1,9 +1,12 @@ import 'package:alist_flutter/generated_api.dart'; import 'package:alist_flutter/pages/alist/pwd_edit_dialog.dart'; +import 'package:alist_flutter/pages/app_update_dialog.dart'; import 'package:alist_flutter/widgets/switch_floating_action_button.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; +import '../../utils/UpdateChecker.dart'; +import '../../utils/intent_utils.dart'; import 'log_list_view.dart'; class AListScreen extends StatelessWidget { @@ -19,12 +22,14 @@ class AListScreen extends StatelessWidget { title: Obx(() => Text("AList - ${ui.alistVersion.value}")), actions: [ IconButton( + tooltip: "桌面快捷方式", onPressed: () { Android().addShortcut(); }, icon: const Icon(Icons.add_home), ), IconButton( + tooltip: "修改 admin 密码", onPressed: () { showDialog( context: context, @@ -38,15 +43,51 @@ class AListScreen extends StatelessWidget { icon: const Icon(Icons.password), ), PopupMenuButton( + tooltip: "更多选项", itemBuilder: (context) { return [ - const PopupMenuItem( + PopupMenuItem( value: 1, - child: Text("检查更新"), + onTap: () async { + AppUpdateDialog.checkUpdateAndShowDialog(context, (b) { + if (!b) { + Get.showSnackbar(GetSnackBar( + message: "已经是最新版本", + duration: const Duration(seconds: 2))); + } + }); + }, + child: const Text("检查更新"), ), - const PopupMenuItem( + PopupMenuItem( value: 2, - child: Text("关于"), + onTap: () { + Android().getVersionName().then((verName) { + showAboutDialog( + context: context, + applicationVersion: verName, + applicationName: "AList", + children: [ + TextButton( + onPressed: () { + IntentUtils.getUrlIntent( + "https://github.com/jing332/AListFlutter") + .launchChooser("AListFlutter"); + }, + child: const Text("AListFlutter")), + TextButton( + onPressed: () { + Android().getAListVersion().then((ver) { + IntentUtils.getUrlIntent( + "https://github.com/alist-org/alist/releases/tag/$ver") + .launchChooser("AList"); + }); + }, + child: const Text("AList")), + ]); + }); + }, + child: const Text("关于"), ), ]; }, diff --git a/lib/pages/alist/log_list_view.dart b/lib/pages/alist/log_list_view.dart index ca84699..01e9ae9 100644 --- a/lib/pages/alist/log_list_view.dart +++ b/lib/pages/alist/log_list_view.dart @@ -29,8 +29,8 @@ class _LogListViewState extends State { final log = widget.logs[index]; return ListTile( dense: true, - title: Text(log.content), - subtitle: Text(log.time), + title: SelectableText(log.content), + subtitle: SelectableText(log.time), leading: LogLevelView(level: log.level), ); }, diff --git a/lib/pages/app_update_dialog.dart b/lib/pages/app_update_dialog.dart index 447096b..e2fe41e 100644 --- a/lib/pages/app_update_dialog.dart +++ b/lib/pages/app_update_dialog.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; +import '../utils/UpdateChecker.dart'; import '../utils/intent_utils.dart'; class AppUpdateDialog extends StatelessWidget { @@ -15,6 +16,29 @@ class AppUpdateDialog extends StatelessWidget { required this.version, required this.htmlUrl}); + static checkUpdateAndShowDialog( + BuildContext context, ValueChanged ? checkFinished ) async { + final checker = UpdateChecker(owner: "jing332", repo: "AListFlutter"); + await checker.downloadData(); + checker.hasNewVersion().then((value) { + checkFinished?.call(value); + if (value) { + showDialog( + context: context, + barrierDismissible: false, + barrierColor: Colors.black.withOpacity(0.5), + builder: (context) { + return AppUpdateDialog( + content: checker.getUpdateContent(), + apkUrl: checker.getApkDownloadUrl(), + htmlUrl: checker.getHtmlUrl(), + version: checker.getTag(), + ); + }); + } + }); + } + @override Widget build(BuildContext context) { return AlertDialog( @@ -42,7 +66,6 @@ class AppUpdateDialog extends StatelessWidget { onPressed: () { Navigator.pop(context); IntentUtils.getUrlIntent(apkUrl).launchChooser("下载APK"); - }, ), ],