diff --git a/lib/pages/member/new/controller.dart b/lib/pages/member/new/controller.dart index fa353c97..91df4f9d 100644 --- a/lib/pages/member/new/controller.dart +++ b/lib/pages/member/new/controller.dart @@ -10,6 +10,12 @@ import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; import 'package:share_plus/share_plus.dart'; +enum MemberTabType { none, home, dynamic, contribute, favorite, bangumi } + +extension MemberTabTypeExt on MemberTabType { + String get title => ['默认', '首页', '动态', '投稿', '收藏', '番剧'][index]; +} + class MemberControllerNew extends CommonController with GetTickerProviderStateMixin { MemberControllerNew({required this.mid}); @@ -47,12 +53,21 @@ class MemberControllerNew extends CommonController tab2!.removeAt(0); } if (tab2!.isNotEmpty) { - if (response.response.defaultTab == 'video') { - response.response.defaultTab = 'dynamic'; + int initialIndex = -1; + MemberTabType memberTab = GStorage.memberTab; + if (memberTab != MemberTabType.none) { + initialIndex = tab2!.indexWhere((item) { + return item.param == memberTab.name; + }); + } + if (initialIndex == -1) { + if (response.response.defaultTab == 'video') { + response.response.defaultTab = 'dynamic'; + } + initialIndex = tab2!.indexWhere((item) { + return item.param == response.response.defaultTab; + }); } - int initialIndex = tab2!.indexWhere((item) { - return item.param == response.response.defaultTab; - }); tabs = tab2!.map((item) => Tab(text: item.title ?? '')).toList(); tabController = TabController( vsync: this, diff --git a/lib/pages/setting/extra_setting.dart b/lib/pages/setting/extra_setting.dart index c707b13e..2fec2f02 100644 --- a/lib/pages/setting/extra_setting.dart +++ b/lib/pages/setting/extra_setting.dart @@ -1,4 +1,6 @@ import 'package:PiliPalaX/pages/main/controller.dart'; +import 'package:PiliPalaX/pages/member/new/controller.dart' + show MemberTabType, MemberTabTypeExt; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:get/get.dart'; @@ -24,6 +26,7 @@ class _ExtraSettingState extends State { final SettingController settingController = Get.put(SettingController()); late dynamic defaultReplySort; late dynamic defaultDynamicType; + late MemberTabType defaultMemberTab; late dynamic enableSystemProxy; late String defaultSystemProxyHost; late String defaultSystemProxyPort; @@ -42,6 +45,7 @@ class _ExtraSettingState extends State { // 优先展示全部动态 all defaultDynamicType = setting.get(SettingBoxKey.defaultDynamicType, defaultValue: 0); + defaultMemberTab = GStorage.memberTab; enableSystemProxy = setting.get(SettingBoxKey.enableSystemProxy, defaultValue: false); defaultSystemProxyHost = @@ -334,6 +338,33 @@ class _ExtraSettingState extends State { } }, ), + ListTile( + dense: false, + title: Text('用户页默认展示TAB', style: titleStyle), + leading: const Icon(Icons.tab), + subtitle: Text( + '当前优先展示「${defaultMemberTab.title}」', + style: subTitleStyle, + ), + onTap: () async { + MemberTabType? result = await showDialog( + context: context, + builder: (context) { + return SelectDialog( + title: '用户页默认展示TAB', + value: defaultMemberTab, + values: MemberTabType.values.map((e) { + return {'title': e.title, 'value': e}; + }).toList()); + }, + ); + if (result != null) { + defaultMemberTab = result; + setting.put(SettingBoxKey.memberTab, result.index); + setState(() {}); + } + }, + ), ListTile( enableFeedback: true, onTap: () => twoFADialog(), diff --git a/lib/pages/setting/widgets/select_dialog.dart b/lib/pages/setting/widgets/select_dialog.dart index 50229f9e..dd5a3b31 100644 --- a/lib/pages/setting/widgets/select_dialog.dart +++ b/lib/pages/setting/widgets/select_dialog.dart @@ -4,14 +4,15 @@ class SelectDialog extends StatefulWidget { final T value; final String title; final List values; - const SelectDialog( - {super.key, - required this.value, - required this.values, - required this.title}); + const SelectDialog({ + super.key, + required this.value, + required this.values, + required this.title, + }); @override - _SelectDialogState createState() => _SelectDialogState(); + State> createState() => _SelectDialogState(); } class _SelectDialogState extends State> { @@ -28,7 +29,11 @@ class _SelectDialogState extends State> { TextStyle titleStyle = Theme.of(context).textTheme.titleMedium!; return AlertDialog( - title: Text(widget.title), + clipBehavior: Clip.hardEdge, + title: Text( + widget.title, + style: TextStyle(fontSize: 18), + ), contentPadding: const EdgeInsets.fromLTRB(0, 12, 0, 12), content: StatefulBuilder(builder: (context, StateSetter setState) { return SingleChildScrollView( @@ -37,6 +42,7 @@ class _SelectDialogState extends State> { children: [ for (var i in widget.values) ...[ RadioListTile( + dense: true, value: i['value'], title: Text(i['title'], style: titleStyle), groupValue: _tempValue, diff --git a/lib/utils/storage.dart b/lib/utils/storage.dart index 0700aea5..f1da5437 100644 --- a/lib/utils/storage.dart +++ b/lib/utils/storage.dart @@ -4,6 +4,7 @@ import 'dart:ui'; import 'package:PiliPalaX/common/widgets/pair.dart'; import 'package:PiliPalaX/http/constants.dart'; import 'package:PiliPalaX/models/common/theme_type.dart'; +import 'package:PiliPalaX/pages/member/new/controller.dart' show MemberTabType; import 'package:PiliPalaX/pages/video/detail/controller.dart' show SegmentType, SegmentTypeExt, SkipType; import 'package:flutter/material.dart'; @@ -79,6 +80,9 @@ class GStorage { static int get schemeVariant => setting.get(SettingBoxKey.schemeVariant, defaultValue: 0); + static MemberTabType get memberTab => MemberTabType + .values[setting.get(SettingBoxKey.memberTab, defaultValue: 0)]; + static ThemeMode get themeMode { switch (setting.get(SettingBoxKey.themeMode, defaultValue: ThemeType.system.code)) { @@ -273,6 +277,7 @@ class SettingBoxKey { danmakuDuration = 'danmakuDuration', strokeWidth = 'strokeWidth', fontWeight = 'fontWeight', + memberTab = 'memberTab', // 代理host port systemProxyHost = 'systemProxyHost',