mirror of
https://github.com/bggRGjQaUbCoE/PiliPlus.git
synced 2026-04-30 15:25:47 +08:00
opt set pageTransition
Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
@@ -480,7 +480,7 @@ List<SettingsModel> get extraSettings => [
|
||||
setKey: SettingBoxKey.refreshDragPercentage,
|
||||
getSubtitle: () => '当前滑动距离: ${Pref.refreshDragPercentage}x',
|
||||
onTap: (setState) async {
|
||||
double? result = await showDialog(
|
||||
final result = await showDialog<double>(
|
||||
context: Get.context!,
|
||||
builder: (context) {
|
||||
return SlideDialog(
|
||||
@@ -509,7 +509,7 @@ List<SettingsModel> get extraSettings => [
|
||||
setKey: SettingBoxKey.refreshDisplacement,
|
||||
getSubtitle: () => '当前指示器高度: ${Pref.refreshDisplacement}',
|
||||
onTap: (setState) async {
|
||||
double? result = await showDialog(
|
||||
final result = await showDialog<double>(
|
||||
context: Get.context!,
|
||||
builder: (context) {
|
||||
return SlideDialog(
|
||||
@@ -585,7 +585,7 @@ List<SettingsModel> get extraSettings => [
|
||||
getSubtitle: () =>
|
||||
'当前:「${Pref.superResolutionType.title}」\n默认设置对番剧生效, 其他视频默认关闭\n超分辨率需要启用硬件解码, 若启用硬件解码后仍然不生效, 尝试切换硬件解码器为 auto-copy',
|
||||
onTap: (setState) async {
|
||||
SuperResolutionType? result = await showDialog(
|
||||
final result = await showDialog<SuperResolutionType>(
|
||||
context: Get.context!,
|
||||
builder: (context) {
|
||||
return SelectDialog<SuperResolutionType>(
|
||||
@@ -992,7 +992,7 @@ List<SettingsModel> get extraSettings => [
|
||||
getSubtitle: () =>
|
||||
'当前优先展示「${ReplySortType.values[Pref.replySortType].title}」',
|
||||
onTap: (setState) async {
|
||||
int? result = await showDialog(
|
||||
final result = await showDialog<int>(
|
||||
context: Get.context!,
|
||||
builder: (context) {
|
||||
return SelectDialog<int>(
|
||||
@@ -1018,7 +1018,7 @@ List<SettingsModel> get extraSettings => [
|
||||
getSubtitle: () =>
|
||||
'当前优先展示「${DynamicsTabType.values[Pref.defaultDynamicType].label}」',
|
||||
onTap: (setState) async {
|
||||
int? result = await showDialog(
|
||||
final result = await showDialog<int>(
|
||||
context: Get.context!,
|
||||
builder: (context) {
|
||||
return SelectDialog<int>(
|
||||
@@ -1044,7 +1044,7 @@ List<SettingsModel> get extraSettings => [
|
||||
leading: const Icon(Icons.tab),
|
||||
getSubtitle: () => '当前优先展示「${Pref.memberTab.title}」',
|
||||
onTap: (setState) async {
|
||||
MemberTabType? result = await showDialog(
|
||||
final result = await showDialog<MemberTabType>(
|
||||
context: Get.context!,
|
||||
builder: (context) {
|
||||
return SelectDialog<MemberTabType>(
|
||||
|
||||
@@ -137,7 +137,7 @@ List<SettingsModel> get playSettings => [
|
||||
getSubtitle: () =>
|
||||
'当前选择偏好:${SubtitlePrefType.values[Pref.subtitlePreferenceV2].desc}',
|
||||
onTap: (setState) async {
|
||||
int? result = await showDialog(
|
||||
final result = await showDialog<int>(
|
||||
context: Get.context!,
|
||||
builder: (context) {
|
||||
return SelectDialog<int>(
|
||||
@@ -284,7 +284,7 @@ List<SettingsModel> get playSettings => [
|
||||
getSubtitle: () =>
|
||||
'当前全屏方向:${FullScreenMode.values[Pref.fullScreenMode].desc}',
|
||||
onTap: (setState) async {
|
||||
int? result = await showDialog(
|
||||
final result = await showDialog<int>(
|
||||
context: Get.context!,
|
||||
builder: (context) {
|
||||
return SelectDialog<int>(
|
||||
@@ -309,7 +309,7 @@ List<SettingsModel> get playSettings => [
|
||||
getSubtitle: () =>
|
||||
'当前展示方式:${BtmProgressBehavior.values[Pref.btmProgressBehavior].desc}',
|
||||
onTap: (setState) async {
|
||||
int? result = await showDialog(
|
||||
final result = await showDialog<int>(
|
||||
context: Get.context!,
|
||||
builder: (context) {
|
||||
return SelectDialog<int>(
|
||||
|
||||
@@ -22,7 +22,6 @@ import 'package:PiliPlus/pages/setting/widgets/multi_select_dialog.dart';
|
||||
import 'package:PiliPlus/pages/setting/widgets/select_dialog.dart';
|
||||
import 'package:PiliPlus/pages/setting/widgets/slide_dialog.dart';
|
||||
import 'package:PiliPlus/plugin/pl_player/utils/fullscreen.dart';
|
||||
import 'package:PiliPlus/router/app_pages.dart';
|
||||
import 'package:PiliPlus/utils/global_data.dart';
|
||||
import 'package:PiliPlus/utils/storage.dart';
|
||||
import 'package:PiliPlus/utils/storage_key.dart';
|
||||
@@ -115,20 +114,19 @@ List<SettingsModel> get styleSettings => [
|
||||
settingsType: SettingsType.normal,
|
||||
title: '页面过渡动画',
|
||||
leading: const Icon(Icons.animation),
|
||||
getSubtitle: () => '当前:${CustomGetPage.pageTransition.name}',
|
||||
getSubtitle: () => '当前:${Pref.pageTransition.name}',
|
||||
onTap: (setState) async {
|
||||
Transition? result = await showDialog(
|
||||
final result = await showDialog<Transition>(
|
||||
context: Get.context!,
|
||||
builder: (context) {
|
||||
return SelectDialog<Transition>(
|
||||
title: '页面过渡动画',
|
||||
value: CustomGetPage.pageTransition,
|
||||
value: Pref.pageTransition,
|
||||
values: Transition.values.map((e) => (e, e.name)).toList(),
|
||||
);
|
||||
},
|
||||
);
|
||||
if (result != null) {
|
||||
CustomGetPage.pageTransition = result;
|
||||
await GStorage.setting.put(SettingBoxKey.pageTransition, result.index);
|
||||
SmartDialog.showToast('重启生效');
|
||||
setState();
|
||||
@@ -155,7 +153,7 @@ List<SettingsModel> get styleSettings => [
|
||||
SettingsModel(
|
||||
settingsType: SettingsType.normal,
|
||||
onTap: (setState) async {
|
||||
double? result = await showDialog(
|
||||
final result = await showDialog<double>(
|
||||
context: Get.context!,
|
||||
builder: (context) {
|
||||
return SlideDialog(
|
||||
@@ -206,7 +204,7 @@ List<SettingsModel> get styleSettings => [
|
||||
leading: const Icon(Icons.person_outlined),
|
||||
getSubtitle: () => '当前:${Pref.upPanelPosition.label}',
|
||||
onTap: (setState) async {
|
||||
UpPanelPosition? result = await showDialog(
|
||||
final result = await showDialog<UpPanelPosition>(
|
||||
context: Get.context!,
|
||||
builder: (context) {
|
||||
return SelectDialog<UpPanelPosition>(
|
||||
@@ -240,7 +238,7 @@ List<SettingsModel> get styleSettings => [
|
||||
SettingsModel(
|
||||
settingsType: SettingsType.normal,
|
||||
onTap: (setState) async {
|
||||
DynamicBadgeMode? result = await showDialog(
|
||||
final result = await showDialog<DynamicBadgeMode>(
|
||||
context: Get.context!,
|
||||
builder: (context) {
|
||||
return SelectDialog<DynamicBadgeMode>(
|
||||
@@ -271,7 +269,7 @@ List<SettingsModel> get styleSettings => [
|
||||
SettingsModel(
|
||||
settingsType: SettingsType.normal,
|
||||
onTap: (setState) async {
|
||||
DynamicBadgeMode? result = await showDialog(
|
||||
final result = await showDialog<DynamicBadgeMode>(
|
||||
context: Get.context!,
|
||||
builder: (context) {
|
||||
return SelectDialog<DynamicBadgeMode>(
|
||||
@@ -521,7 +519,7 @@ List<SettingsModel> get styleSettings => [
|
||||
SettingsModel(
|
||||
settingsType: SettingsType.normal,
|
||||
onTap: (setState) async {
|
||||
double? result = await showDialog(
|
||||
final result = await showDialog<double>(
|
||||
context: Get.context!,
|
||||
builder: (context) {
|
||||
return SlideDialog(
|
||||
@@ -554,7 +552,7 @@ List<SettingsModel> get styleSettings => [
|
||||
SettingsModel(
|
||||
settingsType: SettingsType.normal,
|
||||
onTap: (setState) async {
|
||||
ThemeType? result = await showDialog(
|
||||
final result = await showDialog<ThemeType>(
|
||||
context: Get.context!,
|
||||
builder: (context) {
|
||||
return SelectDialog<ThemeType>(
|
||||
@@ -601,7 +599,7 @@ List<SettingsModel> get styleSettings => [
|
||||
SettingsModel(
|
||||
settingsType: SettingsType.normal,
|
||||
onTap: (setState) async {
|
||||
int? result = await showDialog(
|
||||
final result = await showDialog<int>(
|
||||
context: Get.context!,
|
||||
builder: (context) {
|
||||
return SelectDialog<int>(
|
||||
|
||||
@@ -56,7 +56,7 @@ List<SettingsModel> get videoSettings => [
|
||||
getSubtitle: () =>
|
||||
'当前使用:${VideoUtils.cdnService.desc},部分 CDN 可能失效,如无法播放请尝试切换',
|
||||
onTap: (setState) async {
|
||||
CDNService? result = await showDialog(
|
||||
final result = await showDialog<CDNService>(
|
||||
context: Get.context!,
|
||||
builder: (context) {
|
||||
return const CdnSelectDialog();
|
||||
@@ -145,7 +145,7 @@ List<SettingsModel> get videoSettings => [
|
||||
getSubtitle: () =>
|
||||
'当前画质:${VideoQuality.fromCode(Pref.defaultVideoQa).desc}',
|
||||
onTap: (setState) async {
|
||||
int? result = await showDialog(
|
||||
final result = await showDialog<int>(
|
||||
context: Get.context!,
|
||||
builder: (context) {
|
||||
return SelectDialog<int>(
|
||||
@@ -168,7 +168,7 @@ List<SettingsModel> get videoSettings => [
|
||||
getSubtitle: () =>
|
||||
'当前画质:${VideoQuality.fromCode(Pref.defaultVideoQaCellular).desc}',
|
||||
onTap: (setState) async {
|
||||
int? result = await showDialog(
|
||||
final result = await showDialog<int>(
|
||||
context: Get.context!,
|
||||
builder: (context) {
|
||||
return SelectDialog<int>(
|
||||
@@ -194,7 +194,7 @@ List<SettingsModel> get videoSettings => [
|
||||
getSubtitle: () =>
|
||||
'当前音质:${AudioQuality.fromCode(Pref.defaultAudioQa).desc}',
|
||||
onTap: (setState) async {
|
||||
int? result = await showDialog(
|
||||
final result = await showDialog<int>(
|
||||
context: Get.context!,
|
||||
builder: (context) {
|
||||
return SelectDialog<int>(
|
||||
@@ -217,7 +217,7 @@ List<SettingsModel> get videoSettings => [
|
||||
getSubtitle: () =>
|
||||
'当前音质:${AudioQuality.fromCode(Pref.defaultAudioQaCellular).desc}',
|
||||
onTap: (setState) async {
|
||||
int? result = await showDialog(
|
||||
final result = await showDialog<int>(
|
||||
context: Get.context!,
|
||||
builder: (context) {
|
||||
return SelectDialog<int>(
|
||||
@@ -242,7 +242,7 @@ List<SettingsModel> get videoSettings => [
|
||||
leading: const Icon(Icons.video_settings_outlined),
|
||||
getSubtitle: () => '当前画质:${LiveQuality.fromCode(Pref.liveQuality)?.desc}',
|
||||
onTap: (setState) async {
|
||||
int? result = await showDialog(
|
||||
final result = await showDialog<int>(
|
||||
context: Get.context!,
|
||||
builder: (context) {
|
||||
return SelectDialog<int>(
|
||||
@@ -265,7 +265,7 @@ List<SettingsModel> get videoSettings => [
|
||||
getSubtitle: () =>
|
||||
'当前画质:${LiveQuality.fromCode(Pref.liveQualityCellular)?.desc}',
|
||||
onTap: (setState) async {
|
||||
int? result = await showDialog(
|
||||
final result = await showDialog<int>(
|
||||
context: Get.context!,
|
||||
builder: (context) {
|
||||
return SelectDialog<int>(
|
||||
@@ -288,7 +288,7 @@ List<SettingsModel> get videoSettings => [
|
||||
getSubtitle: () =>
|
||||
'首选解码格式:${VideoDecodeFormatType.fromCode(Pref.defaultDecode).description},请根据设备支持情况与需求调整',
|
||||
onTap: (setState) async {
|
||||
String? result = await showDialog(
|
||||
final result = await showDialog<String>(
|
||||
context: Get.context!,
|
||||
builder: (context) {
|
||||
return SelectDialog<String>(
|
||||
@@ -313,7 +313,7 @@ List<SettingsModel> get videoSettings => [
|
||||
'非杜比视频次选:${VideoDecodeFormatType.fromCode(Pref.secondDecode).description},仍无则选择首个提供的解码格式',
|
||||
leading: const Icon(Icons.swap_horizontal_circle_outlined),
|
||||
onTap: (setState) async {
|
||||
String? result = await showDialog(
|
||||
final result = await showDialog<String>(
|
||||
context: Get.context!,
|
||||
builder: (context) {
|
||||
return SelectDialog<String>(
|
||||
@@ -355,7 +355,7 @@ List<SettingsModel> get videoSettings => [
|
||||
leading: const Icon(Icons.view_timeline_outlined),
|
||||
getSubtitle: () => '当前:${Pref.videoSync}(此项即mpv的--video-sync)',
|
||||
onTap: (setState) async {
|
||||
String? result = await showDialog(
|
||||
final result = await showDialog<String>(
|
||||
context: Get.context!,
|
||||
builder: (context) {
|
||||
return SelectDialog<String>(
|
||||
|
||||
@@ -64,7 +64,7 @@ class _ColorSelectPageState extends State<ColorSelectPage> {
|
||||
children: [
|
||||
ListTile(
|
||||
onTap: () async {
|
||||
ThemeType? result = await showDialog(
|
||||
final result = await showDialog<ThemeType>(
|
||||
context: context,
|
||||
builder: (context) {
|
||||
return SelectDialog<ThemeType>(
|
||||
|
||||
@@ -33,31 +33,34 @@ class _MultiSelectDialogState<T> extends State<MultiSelectDialog<T>> {
|
||||
clipBehavior: Clip.hardEdge,
|
||||
title: Text(widget.title),
|
||||
contentPadding: const EdgeInsets.only(top: 12),
|
||||
content: SingleChildScrollView(
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: widget.values.entries.map((i) {
|
||||
return Builder(
|
||||
builder: (context) {
|
||||
bool isChecked = _tempValues.contains(i.key);
|
||||
return CheckboxListTile(
|
||||
dense: true,
|
||||
value: isChecked,
|
||||
controlAffinity: ListTileControlAffinity.leading,
|
||||
title: Text(
|
||||
i.value,
|
||||
style: theme.textTheme.titleMedium!,
|
||||
),
|
||||
onChanged: (value) {
|
||||
isChecked
|
||||
? _tempValues.remove(i.key)
|
||||
: _tempValues.add(i.key);
|
||||
(context as Element).markNeedsBuild();
|
||||
},
|
||||
);
|
||||
},
|
||||
);
|
||||
}).toList(),
|
||||
content: Material(
|
||||
type: .transparency,
|
||||
child: SingleChildScrollView(
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: widget.values.entries.map((i) {
|
||||
return Builder(
|
||||
builder: (context) {
|
||||
bool isChecked = _tempValues.contains(i.key);
|
||||
return CheckboxListTile(
|
||||
dense: true,
|
||||
value: isChecked,
|
||||
controlAffinity: ListTileControlAffinity.leading,
|
||||
title: Text(
|
||||
i.value,
|
||||
style: theme.textTheme.titleMedium!,
|
||||
),
|
||||
onChanged: (value) {
|
||||
isChecked
|
||||
? _tempValues.remove(i.key)
|
||||
: _tempValues.add(i.key);
|
||||
(context as Element).markNeedsBuild();
|
||||
},
|
||||
);
|
||||
},
|
||||
);
|
||||
}).toList(),
|
||||
),
|
||||
),
|
||||
),
|
||||
actionsPadding: const EdgeInsets.only(left: 16, right: 16, bottom: 12),
|
||||
|
||||
@@ -39,7 +39,9 @@ class _NormalItemState extends State<NormalItem> {
|
||||
return ListTile(
|
||||
contentPadding: widget.contentPadding,
|
||||
onTap: () => widget.onTap?.call(() {
|
||||
setState(() {});
|
||||
if (mounted) {
|
||||
setState(() {});
|
||||
}
|
||||
}),
|
||||
title: Text(
|
||||
widget.title ?? widget.getTitle!(),
|
||||
|
||||
@@ -37,39 +37,42 @@ class _OrderedMultiSelectDialogState<T>
|
||||
clipBehavior: Clip.hardEdge,
|
||||
title: Text(widget.title),
|
||||
contentPadding: const EdgeInsets.only(top: 12),
|
||||
content: SingleChildScrollView(
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: widget.values.entries.map((i) {
|
||||
return Builder(
|
||||
builder: (context) {
|
||||
return OrderedCheckboxListTile(
|
||||
dense: true,
|
||||
value: _tempValues[i.key],
|
||||
title: Text(
|
||||
i.value,
|
||||
style: theme.textTheme.titleMedium!,
|
||||
),
|
||||
onChanged: (value) {
|
||||
if (value == null) {
|
||||
_tempValues[i.key] = _tempValues.length + 1;
|
||||
(context as Element).markNeedsBuild();
|
||||
} else {
|
||||
final pos = _tempValues.remove(i.key)!;
|
||||
if (pos == _tempValues.length + 1) {
|
||||
content: Material(
|
||||
type: .transparency,
|
||||
child: SingleChildScrollView(
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: widget.values.entries.map((i) {
|
||||
return Builder(
|
||||
builder: (context) {
|
||||
return OrderedCheckboxListTile(
|
||||
dense: true,
|
||||
value: _tempValues[i.key],
|
||||
title: Text(
|
||||
i.value,
|
||||
style: theme.textTheme.titleMedium!,
|
||||
),
|
||||
onChanged: (value) {
|
||||
if (value == null) {
|
||||
_tempValues[i.key] = _tempValues.length + 1;
|
||||
(context as Element).markNeedsBuild();
|
||||
} else {
|
||||
_tempValues.updateAll(
|
||||
(key, value) => value > pos ? value - 1 : value,
|
||||
);
|
||||
setState(() {});
|
||||
final pos = _tempValues.remove(i.key)!;
|
||||
if (pos == _tempValues.length + 1) {
|
||||
(context as Element).markNeedsBuild();
|
||||
} else {
|
||||
_tempValues.updateAll(
|
||||
(key, value) => value > pos ? value - 1 : value,
|
||||
);
|
||||
setState(() {});
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
);
|
||||
},
|
||||
);
|
||||
}).toList(),
|
||||
},
|
||||
);
|
||||
},
|
||||
);
|
||||
}).toList(),
|
||||
),
|
||||
),
|
||||
),
|
||||
actionsPadding: const EdgeInsets.only(left: 16, right: 16, bottom: 12),
|
||||
|
||||
@@ -38,27 +38,30 @@ class SelectDialog<T> extends StatelessWidget {
|
||||
? const BoxConstraints(maxWidth: 320, minWidth: 320)
|
||||
: null,
|
||||
contentPadding: const EdgeInsets.symmetric(vertical: 12),
|
||||
content: SingleChildScrollView(
|
||||
child: RadioGroup<T>(
|
||||
onChanged: (v) => Navigator.of(context).pop(v ?? value),
|
||||
groupValue: value,
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: List.generate(
|
||||
values.length,
|
||||
(index) {
|
||||
final item = values[index];
|
||||
return RadioListTile<T>(
|
||||
toggleable: toggleable,
|
||||
dense: true,
|
||||
value: item.$1,
|
||||
title: Text(
|
||||
item.$2,
|
||||
style: titleMedium,
|
||||
),
|
||||
subtitle: subtitleBuilder?.call(context, index),
|
||||
);
|
||||
},
|
||||
content: Material(
|
||||
type: .transparency,
|
||||
child: SingleChildScrollView(
|
||||
child: RadioGroup<T>(
|
||||
onChanged: (v) => Navigator.of(context).pop(v ?? value),
|
||||
groupValue: value,
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: List.generate(
|
||||
values.length,
|
||||
(index) {
|
||||
final item = values[index];
|
||||
return RadioListTile<T>(
|
||||
toggleable: toggleable,
|
||||
dense: true,
|
||||
value: item.$1,
|
||||
title: Text(
|
||||
item.$2,
|
||||
style: titleMedium,
|
||||
),
|
||||
subtitle: subtitleBuilder?.call(context, index),
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
@@ -91,7 +91,9 @@ class _SetSwitchItemState extends State<SetSwitchItem> {
|
||||
);
|
||||
val = true;
|
||||
SmartDialog.showToast('重启生效');
|
||||
setState(() {});
|
||||
if (mounted) {
|
||||
setState(() {});
|
||||
}
|
||||
},
|
||||
child: const Text('确认'),
|
||||
),
|
||||
@@ -113,7 +115,9 @@ class _SetSwitchItemState extends State<SetSwitchItem> {
|
||||
if (widget.needReboot) {
|
||||
SmartDialog.showToast('重启生效');
|
||||
}
|
||||
setState(() {});
|
||||
if (mounted) {
|
||||
setState(() {});
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
|
||||
Reference in New Issue
Block a user