Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2024-11-22 10:58:05 +08:00
parent c5f5c00d37
commit a61a394048
11 changed files with 222 additions and 165 deletions

View File

@@ -1,5 +1,6 @@
import 'package:PiliPalaX/http/loading_state.dart';
import 'package:PiliPalaX/http/user.dart';
import 'package:PiliPalaX/models/user/fav_folder.dart';
import 'package:PiliPalaX/pages/common/common_controller.dart';
import 'package:PiliPalaX/utils/extension.dart';
import 'package:PiliPalaX/utils/storage.dart';
@@ -8,15 +9,10 @@ import 'package:get/get.dart';
import 'package:PiliPalaX/http/video.dart';
class FavDetailController extends CommonController {
// FavFolderItemData? item;
Rx<FavFolderItemData> item = FavFolderItemData().obs;
int? mediaId;
late String heroTag;
RxString loadingText = '加载中...'.obs;
int mediaCount = 0;
RxString title = ''.obs;
RxString cover = ''.obs;
RxString name = ''.obs;
late int attr;
RxBool isOwner = false.obs;
@override
@@ -48,12 +44,8 @@ class FavDetailController extends CommonController {
@override
bool customHandleResponse(Success response) {
if (currentPage == 1) {
title.value = response.response.info['title'];
cover.value = response.response.info['cover'];
name.value = response.response.info['upper']['name'];
mediaCount = response.response.info['media_count'];
attr = response.response.info['attr'];
isOwner.value = response.response.info['mid'] ==
item.value = response.response.info;
isOwner.value = response.response.info.mid ==
GStorage.userInfo.get('userInfoCache')?.mid;
}
List currentList = loadingState.value is Success
@@ -63,7 +55,7 @@ class FavDetailController extends CommonController {
? response.response.medias
: currentList + response.response.medias;
loadingState.value = LoadingState.success(dataList);
if (dataList.length >= mediaCount) {
if (dataList.length >= response.response.info.mediaCount) {
loadingText.value = '没有更多了';
}
return true;

View File

@@ -2,6 +2,7 @@ import 'dart:async';
import 'package:PiliPalaX/http/loading_state.dart';
import 'package:PiliPalaX/http/user.dart';
import 'package:PiliPalaX/models/user/fav_folder.dart';
import 'package:PiliPalaX/pages/fav_search/view.dart' show SearchType;
import 'package:PiliPalaX/utils/utils.dart';
import 'package:easy_debounce/easy_throttle.dart';
@@ -86,11 +87,11 @@ class _FavDetailPageState extends State<FavDetailPage> {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
_favDetailController.title.value,
_favDetailController.item.value.title ?? '',
style: Theme.of(context).textTheme.titleMedium,
),
Text(
'${_favDetailController.mediaCount}条视频',
'${_favDetailController.item.value.mediaCount}条视频',
style: Theme.of(context).textTheme.labelMedium,
)
],
@@ -125,11 +126,16 @@ class _FavDetailPageState extends State<FavDetailPage> {
Get.toNamed(
'/createFav',
parameters: {'mediaId': mediaId},
);
)?.then((res) {
if (res is FavFolderItemData) {
_favDetailController.item.value = res;
}
});
},
child: Text('编辑信息'),
),
if (!Utils.isDefault(_favDetailController.attr))
if (!Utils.isDefault(
_favDetailController.item.value.attr ?? 0))
PopupMenuItem(
onTap: () {
UserHttp.deleteFolder(mediaIds: [mediaId])
@@ -152,13 +158,6 @@ class _FavDetailPageState extends State<FavDetailPage> {
],
flexibleSpace: FlexibleSpaceBar(
background: Container(
// decoration: BoxDecoration(
// border: Border(
// bottom: BorderSide(
// color: Theme.of(context).dividerColor.withOpacity(0.2),
// ),
// ),
// ),
padding: EdgeInsets.only(
top: kTextTabBarHeight +
MediaQuery.of(context).padding.top +
@@ -167,65 +166,84 @@ class _FavDetailPageState extends State<FavDetailPage> {
right: 20),
child: SizedBox(
height: 110,
child: Row(
// mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Obx(
() => Hero(
child: Obx(
() => Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Hero(
tag: _favDetailController.heroTag,
child: NetworkImgLayer(
width: 180,
height: 110,
src: _favDetailController.cover.value,
src: _favDetailController.item.value.cover,
),
),
),
const SizedBox(width: 14),
Obx(
() => Expanded(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const SizedBox(height: 4),
Text(
_favDetailController.title.value,
style: TextStyle(
fontSize: Theme.of(context)
.textTheme
.titleMedium!
.fontSize,
fontWeight: FontWeight.bold),
),
const SizedBox(height: 4),
Text(
_favDetailController.name.value,
style: TextStyle(
fontSize: Theme.of(context)
.textTheme
.labelSmall!
.fontSize,
color:
Theme.of(context).colorScheme.outline),
),
const Spacer(),
Text(
'${_favDetailController.mediaCount}条视频',
style: TextStyle(
fontSize: Theme.of(context)
.textTheme
.labelSmall!
.fontSize,
color:
Theme.of(context).colorScheme.outline),
),
const SizedBox(height: 20),
],
const SizedBox(width: 14),
Expanded(
child: SizedBox(
height: 110,
child: Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const SizedBox(height: 4),
Text(
_favDetailController.item.value.title ?? '',
style: TextStyle(
fontSize: Theme.of(context)
.textTheme
.titleMedium!
.fontSize,
fontWeight: FontWeight.bold),
),
if (_favDetailController
.item.value.intro?.isNotEmpty ==
true)
Text(
_favDetailController.item.value.intro ?? '',
style: TextStyle(
fontSize: Theme.of(context)
.textTheme
.labelSmall!
.fontSize,
color: Theme.of(context)
.colorScheme
.outline),
),
const SizedBox(height: 4),
Text(
_favDetailController.item.value.upper?.name ??
'',
style: TextStyle(
fontSize: Theme.of(context)
.textTheme
.labelSmall!
.fontSize,
color: Theme.of(context)
.colorScheme
.outline),
),
const Spacer(),
if (_favDetailController.item.value.attr !=
null)
Text(
'${_favDetailController.item.value.mediaCount}条视频 · ${Utils.isPublicText(_favDetailController.item.value.attr ?? 0)}',
style: TextStyle(
fontSize: Theme.of(context)
.textTheme
.labelSmall!
.fontSize,
color: Theme.of(context)
.colorScheme
.outline),
),
],
),
),
),
),
],
],
),
),
),
),