mirror of
https://github.com/bggRGjQaUbCoE/PiliPlus.git
synced 2026-06-02 09:08:17 +08:00
opt: space tab
Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
@@ -76,7 +76,7 @@ class SearchHttp {
|
|||||||
queryParameters: params,
|
queryParameters: params,
|
||||||
);
|
);
|
||||||
if (res.data is! Map) {
|
if (res.data is! Map) {
|
||||||
return Error('没有相关数据');
|
return const Error('没有相关数据');
|
||||||
}
|
}
|
||||||
if (res.data['code'] == 0) {
|
if (res.data['code'] == 0) {
|
||||||
dynamic data;
|
dynamic data;
|
||||||
@@ -144,7 +144,7 @@ class SearchHttp {
|
|||||||
queryParameters: params,
|
queryParameters: params,
|
||||||
);
|
);
|
||||||
if (res.data is! Map) {
|
if (res.data is! Map) {
|
||||||
return Error('没有相关数据');
|
return const Error('没有相关数据');
|
||||||
}
|
}
|
||||||
if (res.data['code'] == 0) {
|
if (res.data['code'] == 0) {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -241,7 +241,7 @@ class UserHttp {
|
|||||||
);
|
);
|
||||||
if (res.data['code'] == 0) {
|
if (res.data['code'] == 0) {
|
||||||
if (res.data['data']['count'] == 0) {
|
if (res.data['data']['count'] == 0) {
|
||||||
return Success({'count': 0});
|
return const Success({'count': 0});
|
||||||
}
|
}
|
||||||
List<HotVideoItemModel> list = <HotVideoItemModel>[];
|
List<HotVideoItemModel> list = <HotVideoItemModel>[];
|
||||||
if (res.data['data']?['list'] != null) {
|
if (res.data['data']?['list'] != null) {
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
import 'package:PiliPlus/models/space/filter.dart';
|
|
||||||
import 'package:json_annotation/json_annotation.dart';
|
import 'package:json_annotation/json_annotation.dart';
|
||||||
|
|
||||||
part 'item.g.dart';
|
part 'item.g.dart';
|
||||||
@@ -47,8 +46,6 @@ class SpaceItem {
|
|||||||
bool? state;
|
bool? state;
|
||||||
String? bvid;
|
String? bvid;
|
||||||
int? videos;
|
int? videos;
|
||||||
// @JsonKey(name: 'three_point')
|
|
||||||
// List<ThreePoint>? threePoint;
|
|
||||||
@JsonKey(name: 'first_cid')
|
@JsonKey(name: 'first_cid')
|
||||||
int? firstCid;
|
int? firstCid;
|
||||||
@JsonKey(name: 'view_content')
|
@JsonKey(name: 'view_content')
|
||||||
@@ -57,7 +54,6 @@ class SpaceItem {
|
|||||||
int? iconType;
|
int? iconType;
|
||||||
@JsonKey(name: 'publish_time_text')
|
@JsonKey(name: 'publish_time_text')
|
||||||
String? publishTimeText;
|
String? publishTimeText;
|
||||||
List<SpaceTabFilter>? filter;
|
|
||||||
|
|
||||||
SpaceItem({
|
SpaceItem({
|
||||||
this.title,
|
this.title,
|
||||||
@@ -89,12 +85,10 @@ class SpaceItem {
|
|||||||
this.state,
|
this.state,
|
||||||
this.bvid,
|
this.bvid,
|
||||||
this.videos,
|
this.videos,
|
||||||
// this.threePoint,
|
|
||||||
this.firstCid,
|
this.firstCid,
|
||||||
this.viewContent,
|
this.viewContent,
|
||||||
this.iconType,
|
this.iconType,
|
||||||
this.publishTimeText,
|
this.publishTimeText,
|
||||||
this.filter,
|
|
||||||
});
|
});
|
||||||
|
|
||||||
factory SpaceItem.fromJson(Map<String, dynamic> json) => _$ItemFromJson(json);
|
factory SpaceItem.fromJson(Map<String, dynamic> json) => _$ItemFromJson(json);
|
||||||
|
|||||||
@@ -36,16 +36,10 @@ SpaceItem _$ItemFromJson(Map<String, dynamic> json) => SpaceItem(
|
|||||||
state: json['state'] as bool?,
|
state: json['state'] as bool?,
|
||||||
bvid: json['bvid'] as String?,
|
bvid: json['bvid'] as String?,
|
||||||
videos: (json['videos'] as num?)?.toInt(),
|
videos: (json['videos'] as num?)?.toInt(),
|
||||||
// threePoint: (json['three_point'] as List<dynamic>?)
|
|
||||||
// ?.map((e) => ThreePoint.fromJson(e as Map<String, dynamic>))
|
|
||||||
// .toList(),
|
|
||||||
firstCid: (json['first_cid'] as num?)?.toInt(),
|
firstCid: (json['first_cid'] as num?)?.toInt(),
|
||||||
viewContent: json['view_content'] as String?,
|
viewContent: json['view_content'] as String?,
|
||||||
iconType: (json['icon_type'] as num?)?.toInt(),
|
iconType: (json['icon_type'] as num?)?.toInt(),
|
||||||
publishTimeText: json['publish_time_text'] as String?,
|
publishTimeText: json['publish_time_text'] as String?,
|
||||||
filter: (json['filter'] as List?)
|
|
||||||
?.map((e) => SpaceTabFilter.fromJson(e))
|
|
||||||
.toList(),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$ItemToJson(SpaceItem instance) => <String, dynamic>{
|
Map<String, dynamic> _$ItemToJson(SpaceItem instance) => <String, dynamic>{
|
||||||
@@ -78,7 +72,6 @@ Map<String, dynamic> _$ItemToJson(SpaceItem instance) => <String, dynamic>{
|
|||||||
'state': instance.state,
|
'state': instance.state,
|
||||||
'bvid': instance.bvid,
|
'bvid': instance.bvid,
|
||||||
'videos': instance.videos,
|
'videos': instance.videos,
|
||||||
// 'three_point': instance.threePoint,
|
|
||||||
'first_cid': instance.firstCid,
|
'first_cid': instance.firstCid,
|
||||||
'view_content': instance.viewContent,
|
'view_content': instance.viewContent,
|
||||||
'icon_type': instance.iconType,
|
'icon_type': instance.iconType,
|
||||||
|
|||||||
@@ -1,16 +1,15 @@
|
|||||||
|
import 'package:PiliPlus/models/space/tab_item.dart';
|
||||||
import 'package:json_annotation/json_annotation.dart';
|
import 'package:json_annotation/json_annotation.dart';
|
||||||
|
|
||||||
import 'package:PiliPlus/models/space/item.dart';
|
|
||||||
|
|
||||||
part 'tab2.g.dart';
|
part 'tab2.g.dart';
|
||||||
|
|
||||||
@JsonSerializable()
|
@JsonSerializable()
|
||||||
class Tab2 {
|
class Tab2 {
|
||||||
String? title;
|
final String? title;
|
||||||
String? param;
|
final String? param;
|
||||||
List<SpaceItem>? items;
|
final List<SpaceTabItem>? items;
|
||||||
|
|
||||||
Tab2({this.title, this.param, this.items});
|
const Tab2({this.title, this.param, this.items});
|
||||||
|
|
||||||
factory Tab2.fromJson(Map<String, dynamic> json) => _$Tab2FromJson(json);
|
factory Tab2.fromJson(Map<String, dynamic> json) => _$Tab2FromJson(json);
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ Tab2 _$Tab2FromJson(Map<String, dynamic> json) => Tab2(
|
|||||||
title: json['title'] as String?,
|
title: json['title'] as String?,
|
||||||
param: json['param'] as String?,
|
param: json['param'] as String?,
|
||||||
items: (json['items'] as List<dynamic>?)
|
items: (json['items'] as List<dynamic>?)
|
||||||
?.map((e) => SpaceItem.fromJson(e as Map<String, dynamic>))
|
?.map((e) => SpaceTabItem.fromJson(e as Map<String, dynamic>))
|
||||||
.toList(),
|
.toList(),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
27
lib/models/space/tab_item.dart
Normal file
27
lib/models/space/tab_item.dart
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
import 'package:PiliPlus/models/space/filter.dart';
|
||||||
|
|
||||||
|
class SpaceTabItem {
|
||||||
|
final String? title;
|
||||||
|
final String? param;
|
||||||
|
final int? seriesId;
|
||||||
|
final int? seasonId;
|
||||||
|
final List<SpaceTabFilter>? filter;
|
||||||
|
|
||||||
|
const SpaceTabItem({
|
||||||
|
this.title,
|
||||||
|
this.param,
|
||||||
|
this.seriesId,
|
||||||
|
this.seasonId,
|
||||||
|
this.filter,
|
||||||
|
});
|
||||||
|
|
||||||
|
factory SpaceTabItem.fromJson(Map<String, dynamic> json) => SpaceTabItem(
|
||||||
|
title: json['title'] as String?,
|
||||||
|
param: json['param'] as String?,
|
||||||
|
seriesId: (json['series_id'] as num?)?.toInt(),
|
||||||
|
seasonId: (json['season_id'] as num?)?.toInt(),
|
||||||
|
filter: (json['filter'] as List?)
|
||||||
|
?.map((e) => SpaceTabFilter.fromJson(e))
|
||||||
|
.toList(),
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -63,7 +63,7 @@ abstract class CommonWhisperController<R>
|
|||||||
Future<void> onDeleteList() async {
|
Future<void> onDeleteList() async {
|
||||||
var res = await ImGrpc.deleteSessionList(pageType: sessionPageType);
|
var res = await ImGrpc.deleteSessionList(pageType: sessionPageType);
|
||||||
if (res.isSuccess) {
|
if (res.isSuccess) {
|
||||||
loadingState.value = Success(null);
|
loadingState.value = const Success(null);
|
||||||
} else {
|
} else {
|
||||||
res.toast();
|
res.toast();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ class FavController
|
|||||||
@override
|
@override
|
||||||
Future<void> queryData([bool isRefresh = true]) {
|
Future<void> queryData([bool isRefresh = true]) {
|
||||||
if (mid == 0) {
|
if (mid == 0) {
|
||||||
loadingState.value = Error('账号未登录');
|
loadingState.value = const Error('账号未登录');
|
||||||
return Future.value();
|
return Future.value();
|
||||||
}
|
}
|
||||||
return super.queryData(isRefresh);
|
return super.queryData(isRefresh);
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ class _HistoryPageState extends State<HistoryPage>
|
|||||||
_historyController.baseCtr
|
_historyController.baseCtr
|
||||||
.onClearHistory(context, () {
|
.onClearHistory(context, () {
|
||||||
_historyController.loadingState.value =
|
_historyController.loadingState.value =
|
||||||
Success(null);
|
const Success(null);
|
||||||
if (_historyController.tabController !=
|
if (_historyController.tabController !=
|
||||||
null) {
|
null) {
|
||||||
for (final item
|
for (final item
|
||||||
@@ -99,7 +99,7 @@ class _HistoryPageState extends State<HistoryPage>
|
|||||||
Get.find<HistoryController>(
|
Get.find<HistoryController>(
|
||||||
tag: item.type)
|
tag: item.type)
|
||||||
.loadingState
|
.loadingState
|
||||||
.value = Success(null);
|
.value = const Success(null);
|
||||||
} catch (_) {}
|
} catch (_) {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,8 +5,8 @@ import 'package:PiliPlus/http/member.dart';
|
|||||||
import 'package:PiliPlus/http/video.dart';
|
import 'package:PiliPlus/http/video.dart';
|
||||||
import 'package:PiliPlus/models/common/member/tab_type.dart';
|
import 'package:PiliPlus/models/common/member/tab_type.dart';
|
||||||
import 'package:PiliPlus/models/space/data.dart';
|
import 'package:PiliPlus/models/space/data.dart';
|
||||||
import 'package:PiliPlus/models/space/item.dart';
|
|
||||||
import 'package:PiliPlus/models/space/tab2.dart';
|
import 'package:PiliPlus/models/space/tab2.dart';
|
||||||
|
import 'package:PiliPlus/models/space/tab_item.dart';
|
||||||
import 'package:PiliPlus/pages/common/common_data_controller.dart';
|
import 'package:PiliPlus/pages/common/common_data_controller.dart';
|
||||||
import 'package:PiliPlus/utils/request_utils.dart';
|
import 'package:PiliPlus/utils/request_utils.dart';
|
||||||
import 'package:PiliPlus/utils/storage.dart';
|
import 'package:PiliPlus/utils/storage.dart';
|
||||||
@@ -123,12 +123,12 @@ class MemberController extends CommonDataController<SpaceData, SpaceData?>
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
bool handleError(String? errMsg) {
|
bool handleError(String? errMsg) {
|
||||||
tab2 = [
|
tab2 = const [
|
||||||
Tab2(title: '动态', param: 'dynamic'),
|
Tab2(title: '动态', param: 'dynamic'),
|
||||||
Tab2(
|
Tab2(
|
||||||
title: '投稿',
|
title: '投稿',
|
||||||
param: 'contribute',
|
param: 'contribute',
|
||||||
items: [SpaceItem(title: '视频', param: 'video')],
|
items: [SpaceTabItem(title: '视频', param: 'video')],
|
||||||
),
|
),
|
||||||
Tab2(title: '收藏', param: 'favorite'),
|
Tab2(title: '收藏', param: 'favorite'),
|
||||||
Tab2(title: '追番', param: 'bangumi'),
|
Tab2(title: '追番', param: 'bangumi'),
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import 'dart:math';
|
import 'dart:math';
|
||||||
|
|
||||||
import 'package:PiliPlus/http/loading_state.dart';
|
import 'package:PiliPlus/http/loading_state.dart';
|
||||||
import 'package:PiliPlus/models/space/item.dart';
|
|
||||||
import 'package:PiliPlus/models/space/tab2.dart';
|
import 'package:PiliPlus/models/space/tab2.dart';
|
||||||
|
import 'package:PiliPlus/models/space/tab_item.dart';
|
||||||
import 'package:PiliPlus/pages/common/common_data_controller.dart';
|
import 'package:PiliPlus/pages/common/common_data_controller.dart';
|
||||||
import 'package:PiliPlus/pages/member/controller.dart';
|
import 'package:PiliPlus/pages/member/controller.dart';
|
||||||
import 'package:PiliPlus/utils/extension.dart';
|
import 'package:PiliPlus/utils/extension.dart';
|
||||||
@@ -21,7 +21,7 @@ class MemberContributeCtr extends CommonDataController
|
|||||||
TabController? tabController;
|
TabController? tabController;
|
||||||
List<Tab>? tabs;
|
List<Tab>? tabs;
|
||||||
late final _ctr = Get.find<MemberController>(tag: heroTag);
|
late final _ctr = Get.find<MemberController>(tag: heroTag);
|
||||||
List<SpaceItem>? items;
|
List<SpaceTabItem>? items;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onInit() {
|
void onInit() {
|
||||||
@@ -34,7 +34,7 @@ class MemberContributeCtr extends CommonDataController
|
|||||||
// show if exist
|
// show if exist
|
||||||
if (_ctr.hasSeasonOrSeries == true) {
|
if (_ctr.hasSeasonOrSeries == true) {
|
||||||
items!.add(
|
items!.add(
|
||||||
SpaceItem(
|
const SpaceTabItem(
|
||||||
param: 'ugcSeason',
|
param: 'ugcSeason',
|
||||||
title: '全部合集/列表',
|
title: '全部合集/列表',
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import 'package:PiliPlus/common/widgets/loading_widget/loading_widget.dart';
|
|||||||
import 'package:PiliPlus/common/widgets/video_card/video_card_v_member_home.dart';
|
import 'package:PiliPlus/common/widgets/video_card/video_card_v_member_home.dart';
|
||||||
import 'package:PiliPlus/http/loading_state.dart';
|
import 'package:PiliPlus/http/loading_state.dart';
|
||||||
import 'package:PiliPlus/models/space/data.dart';
|
import 'package:PiliPlus/models/space/data.dart';
|
||||||
import 'package:PiliPlus/models/space/item.dart';
|
import 'package:PiliPlus/models/space/tab_item.dart';
|
||||||
import 'package:PiliPlus/pages/bangumi/widgets/bangumi_card_v_member_home.dart';
|
import 'package:PiliPlus/pages/bangumi/widgets/bangumi_card_v_member_home.dart';
|
||||||
import 'package:PiliPlus/pages/member/controller.dart';
|
import 'package:PiliPlus/pages/member/controller.dart';
|
||||||
import 'package:PiliPlus/pages/member_article/widget/item.dart';
|
import 'package:PiliPlus/pages/member_article/widget/item.dart';
|
||||||
@@ -257,7 +257,7 @@ class _MemberHomeState extends State<MemberHome>
|
|||||||
_ctr.tab2!.indexWhere((item) => item.param == param);
|
_ctr.tab2!.indexWhere((item) => item.param == param);
|
||||||
if (index != -1) {
|
if (index != -1) {
|
||||||
if (['video', 'article', 'audio'].contains(param1)) {
|
if (['video', 'article', 'audio'].contains(param1)) {
|
||||||
List<SpaceItem> items = _ctr.tab2!
|
List<SpaceTabItem> items = _ctr.tab2!
|
||||||
.firstWhere((item) => item.param == param)
|
.firstWhere((item) => item.param == param)
|
||||||
.items!;
|
.items!;
|
||||||
int index1 =
|
int index1 =
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ class SubController
|
|||||||
@override
|
@override
|
||||||
Future<void> queryData([bool isRefresh = true]) {
|
Future<void> queryData([bool isRefresh = true]) {
|
||||||
if (mid == 0) {
|
if (mid == 0) {
|
||||||
loadingState.value = Error('账号未登录');
|
loadingState.value = const Error('账号未登录');
|
||||||
return Future.value();
|
return Future.value();
|
||||||
}
|
}
|
||||||
return super.queryData(isRefresh);
|
return super.queryData(isRefresh);
|
||||||
|
|||||||
@@ -1092,7 +1092,7 @@ class VideoDetailController extends GetxController
|
|||||||
subType: videoType == SearchType.media_bangumi ? subType : null,
|
subType: videoType == SearchType.media_bangumi ? subType : null,
|
||||||
callback: () {
|
callback: () {
|
||||||
if (videoState.value is! Success) {
|
if (videoState.value is! Success) {
|
||||||
videoState.value = Success(null);
|
videoState.value = const Success(null);
|
||||||
}
|
}
|
||||||
setSubtitle(vttSubtitlesIndex.value);
|
setSubtitle(vttSubtitlesIndex.value);
|
||||||
},
|
},
|
||||||
@@ -1186,7 +1186,7 @@ class VideoDetailController extends GetxController
|
|||||||
SmartDialog.showToast('视频资源不存在');
|
SmartDialog.showToast('视频资源不存在');
|
||||||
autoPlay.value = false;
|
autoPlay.value = false;
|
||||||
isShowCover.value = true;
|
isShowCover.value = true;
|
||||||
videoState.value = Error('视频资源不存在');
|
videoState.value = const Error('视频资源不存在');
|
||||||
if (plPlayerController.isFullScreen.value) {
|
if (plPlayerController.isFullScreen.value) {
|
||||||
plPlayerController.toggleFullScreen(false);
|
plPlayerController.toggleFullScreen(false);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user