From 5643ebfe4873fda2d6d234deaabcba8a815d6d4b Mon Sep 17 00:00:00 2001 From: bggRGjQaUbCoE Date: Tue, 15 Apr 2025 11:36:17 +0800 Subject: [PATCH] feat: custom page transition Closes #682 Signed-off-by: bggRGjQaUbCoE --- lib/pages/setting/widgets/model.dart | 26 ++++++++++++++++++++++++++ lib/router/app_pages.dart | 3 ++- lib/utils/storage.dart | 6 ++++++ 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/lib/pages/setting/widgets/model.dart b/lib/pages/setting/widgets/model.dart index 4cfb61e0..a581a36b 100644 --- a/lib/pages/setting/widgets/model.dart +++ b/lib/pages/setting/widgets/model.dart @@ -177,6 +177,32 @@ List get styleSettings => [ Get.forceAppUpdate(); }, ), + SettingsModel( + settingsType: SettingsType.normal, + title: '页面过渡动画', + leading: const Icon(Icons.animation), + getSubtitle: () => '当前:${GStorage.pageTransition.name}', + onTap: (setState) async { + Transition? result = await showDialog( + context: Get.context!, + builder: (context) { + return SelectDialog( + title: '页面过渡动画', + value: GStorage.pageTransition, + values: Transition.values.map((e) { + return (e, e.name); + }).toList(), + ); + }, + ); + if (result != null) { + await GStorage.setting + .put(SettingBoxKey.pageTransition, result.index); + SmartDialog.showToast('重启生效'); + setState(); + } + }, + ), SettingsModel( settingsType: SettingsType.sw1tch, title: 'MD3样式底栏', diff --git a/lib/router/app_pages.dart b/lib/router/app_pages.dart index b760faa5..5701e60a 100644 --- a/lib/router/app_pages.dart +++ b/lib/router/app_pages.dart @@ -10,6 +10,7 @@ import 'package:PiliPlus/pages/video/detail/introduction/widgets/create_fav_page import 'package:PiliPlus/pages/video/detail/view_v.dart'; import 'package:PiliPlus/pages/webdav/view.dart'; import 'package:PiliPlus/pages/webview/webview_page.dart'; +import 'package:PiliPlus/utils/storage.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:PiliPlus/pages/msg_feed_top/at_me/view.dart'; @@ -192,7 +193,7 @@ class CustomGetPage extends GetPage { super.transitionDuration, }) : super( curve: Curves.linear, - transition: Transition.native, + transition: GStorage.pageTransition, showCupertinoParallax: false, popGesture: false, fullscreenDialog: fullscreen, diff --git a/lib/utils/storage.dart b/lib/utils/storage.dart index ec0395f7..81347c8b 100644 --- a/lib/utils/storage.dart +++ b/lib/utils/storage.dart @@ -29,6 +29,7 @@ import 'package:PiliPlus/utils/login.dart'; import 'package:PiliPlus/utils/set_int_adapter.dart'; import 'package:cookie_jar/cookie_jar.dart'; import 'package:flutter/material.dart'; +import 'package:get/get_navigation/src/routes/transitions_type.dart'; import 'package:hive_flutter/hive_flutter.dart'; import 'package:path_provider/path_provider.dart'; import 'package:PiliPlus/models/model_owner.dart'; @@ -471,6 +472,10 @@ class GStorage { static bool get showPgcTimeline => GStorage.setting.get(SettingBoxKey.showPgcTimeline, defaultValue: true); + static Transition pageTransition = Transition.values[GStorage.setting.get( + SettingBoxKey.pageTransition, + defaultValue: Transition.native.index)]; + static List get dynamicDetailRatio => List.from(setting .get(SettingBoxKey.dynamicDetailRatio, defaultValue: [60.0, 40.0])); @@ -759,6 +764,7 @@ class SettingBoxKey { recordSearchHistory = 'recordSearchHistory', navSearchStreamDebounce = 'navSearchStreamDebounce', showPgcTimeline = 'showPgcTimeline', + pageTransition = 'pageTransition', // WebDAV webdavUri = 'webdavUri',