opt: bar set (#862)

* opt: bar set

* opt: navbar

* fix: type
This commit is contained in:
My-Responsitories
2025-05-21 02:14:08 +08:00
committed by GitHub
parent acb3784071
commit 218e829fd4
19 changed files with 288 additions and 556 deletions

View File

@@ -0,0 +1,4 @@
abstract class EnumWithLabel {
String get label;
int get index;
}

View File

@@ -1,5 +1,7 @@
import 'package:PiliPlus/models/common/enum_with_label.dart';
import 'package:PiliPlus/pages/bangumi/controller.dart';
import 'package:PiliPlus/pages/bangumi/view.dart';
import 'package:PiliPlus/pages/common/common_controller.dart';
import 'package:PiliPlus/pages/hot/controller.dart';
import 'package:PiliPlus/pages/hot/view.dart';
import 'package:PiliPlus/pages/live/controller.dart';
@@ -8,9 +10,10 @@ import 'package:PiliPlus/pages/rank/controller.dart';
import 'package:PiliPlus/pages/rank/view.dart';
import 'package:PiliPlus/pages/rcmd/controller.dart';
import 'package:PiliPlus/pages/rcmd/view.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
enum HomeTabType {
enum HomeTabType implements EnumWithLabel {
live('直播'),
rcmd('推荐'),
hot('热门'),
@@ -18,45 +21,26 @@ enum HomeTabType {
bangumi('番剧'),
cinema('影视');
final String description;
const HomeTabType(this.description);
}
@override
final String label;
const HomeTabType(this.label);
List get homeTabsConfig => [
{
'label': '直播',
'type': HomeTabType.live,
'ctr': Get.find<LiveController>,
'page': const LivePage(),
},
{
'label': '推荐',
'type': HomeTabType.rcmd,
'ctr': Get.find<RcmdController>,
'page': const RcmdPage(),
},
{
'label': '热门',
'type': HomeTabType.hot,
'ctr': Get.find<HotController>,
'page': const HotPage(),
},
{
'label': '分区',
'type': HomeTabType.rank,
'ctr': Get.find<RankController>,
'page': const RankPage(),
},
{
'label': '番剧',
'type': HomeTabType.bangumi,
'ctr': Get.find<BangumiController>,
'page': const BangumiPage(tabType: HomeTabType.bangumi),
},
{
'label': '影视',
'type': HomeTabType.cinema,
'ctr': Get.find<BangumiController>,
'page': const BangumiPage(tabType: HomeTabType.cinema),
},
];
ScrollOrRefreshMixin Function() get ctr => switch (this) {
HomeTabType.live => Get.find<LiveController>,
HomeTabType.rcmd => Get.find<RcmdController>,
HomeTabType.hot => Get.find<HotController>,
HomeTabType.rank =>
(Get.find<RankController>) as ScrollOrRefreshMixin Function(),
HomeTabType.bangumi || HomeTabType.cinema => () =>
Get.find<BangumiController>(tag: name),
};
Widget get page => switch (this) {
HomeTabType.live => const LivePage(),
HomeTabType.rcmd => const RcmdPage(),
HomeTabType.hot => const HotPage(),
HomeTabType.rank => const RankPage(),
HomeTabType.bangumi => const BangumiPage(tabType: HomeTabType.bangumi),
HomeTabType.cinema => const BangumiPage(tabType: HomeTabType.cinema),
};
}

View File

@@ -1,68 +1,34 @@
import 'package:PiliPlus/models/common/enum_with_label.dart';
import 'package:PiliPlus/pages/dynamics/view.dart';
import 'package:PiliPlus/pages/home/view.dart';
import 'package:PiliPlus/pages/media/view.dart';
import 'package:flutter/material.dart';
// enum NavigationBarType {
// home(
// '首页',
// Icon(Icons.home_outlined, size: 23),
// Icon(Icons.home, size: 21),
// ),
// dynamics(
// '动态',
// Icon(Icons.motion_photos_on_outlined, size: 21),
// Icon(Icons.motion_photos_on, size: 21),
// ),
// media(
// '媒体库',
// Icon(Icons.video_collection_outlined, size: 21),
// Icon(Icons.video_collection, size: 21),
// );
enum NavigationBarType implements EnumWithLabel {
home(
'首页',
Icon(Icons.home_outlined, size: 23),
Icon(Icons.home, size: 21),
HomePage(),
),
dynamics(
'动态',
Icon(Icons.motion_photos_on_outlined, size: 21),
Icon(Icons.motion_photos_on, size: 21),
DynamicsPage(),
),
media(
'媒体库',
Icon(Icons.video_collection_outlined, size: 21),
Icon(Icons.video_collection, size: 21),
MediaPage(),
);
// final Icon icon;
// final Icon selectIcon;
// final String label;
@override
final String label;
final Icon icon;
final Icon selectIcon;
final Widget page;
// const NavigationBarType(this.label, this.icon, this.selectIcon);
// }
// TODO enum
List defaultNavigationBars = [
{
'id': 0,
'icon': const Icon(
Icons.home_outlined,
size: 23,
),
'selectIcon': const Icon(
Icons.home,
size: 23,
),
'label': "首页",
'count': 0,
},
{
'id': 1,
'icon': const Icon(
Icons.motion_photos_on_outlined,
size: 21,
),
'selectIcon': const Icon(
Icons.motion_photos_on,
size: 21,
),
'label': "动态",
'count': 0,
},
{
'id': 2,
'icon': const Icon(
Icons.video_collection_outlined,
size: 21,
),
'selectIcon': const Icon(
Icons.video_collection,
size: 21,
),
'label': "媒体库",
'count': 0,
}
];
const NavigationBarType(this.label, this.icon, this.selectIcon, this.page);
}