opt: remove fav folder after deleted

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2024-11-21 15:48:27 +08:00
parent c0a482ab78
commit 37ddebca50
5 changed files with 80 additions and 16 deletions

View File

@@ -1,6 +1,8 @@
import 'package:PiliPalaX/common/skeleton/video_card_h.dart';
import 'package:PiliPalaX/http/loading_state.dart';
import 'package:PiliPalaX/models/user/fav_folder.dart';
import 'package:PiliPalaX/pages/fav_search/view.dart';
import 'package:PiliPalaX/utils/utils.dart';
import 'package:easy_debounce/easy_throttle.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
@@ -53,6 +55,32 @@ class _FavPageState extends State<FavPage> {
style: Theme.of(context).textTheme.titleMedium,
),
actions: [
IconButton(
onPressed: () {
Get.toNamed('/createFav')?.then((data) {
if (data != null) {
List list = _favController.loadingState.value is Success
? (_favController.loadingState.value as Success).response
: [];
list.insert(
list.isNotEmpty ? 1 : 0,
FavFolderItemData(
id: data['id'],
fid: data['fid'],
attr: data['attr'],
title: data['title'],
favState: data['fav_state'],
mediaCount: data['media_count'],
),
);
_favController.loadingState.value =
LoadingState.success(list);
}
});
},
icon: const Icon(Icons.add),
tooltip: '新建收藏夹',
),
IconButton(
onPressed: () {
if (_favController.loadingState.value is Success) {
@@ -96,7 +124,31 @@ class _FavPageState extends State<FavPage> {
delegate: SliverChildBuilderDelegate(
childCount: loadingState.response.length,
(BuildContext context, int index) {
return FavItem(favFolderItem: loadingState.response[index]);
String heroTag =
Utils.makeHeroTag(loadingState.response[index].fid);
return FavItem(
heroTag: heroTag,
favFolderItem: loadingState.response[index],
onTap: () {
Get.toNamed(
'/favDetail',
arguments: loadingState.response[index],
parameters: {
'heroTag': heroTag,
'mediaId': loadingState.response[index].id.toString(),
},
)?.then((res) {
if (res == true) {
List list =
(_favController.loadingState.value as Success)
.response;
list.removeAt(index);
_favController.loadingState.value =
LoadingState.success(list);
}
});
},
);
},
),
)

View File

@@ -1,25 +1,22 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:PiliPalaX/common/constants.dart';
import 'package:PiliPalaX/common/widgets/network_img_layer.dart';
import 'package:PiliPalaX/utils/utils.dart';
class FavItem extends StatelessWidget {
final String heroTag;
final dynamic favFolderItem;
const FavItem({super.key, required this.favFolderItem});
final GestureTapCallback onTap;
const FavItem({
super.key,
required this.onTap,
required this.heroTag,
required this.favFolderItem,
});
@override
Widget build(BuildContext context) {
String heroTag = Utils.makeHeroTag(favFolderItem.fid);
return InkWell(
onTap: () => Get.toNamed(
'/favDetail',
arguments: favFolderItem,
parameters: {
'heroTag': heroTag,
'mediaId': favFolderItem.id.toString(),
},
),
onTap: onTap,
child: Padding(
padding: const EdgeInsets.fromLTRB(12, 7, 12, 7),
child: LayoutBuilder(
@@ -80,6 +77,15 @@ class VideoContent extends StatelessWidget {
letterSpacing: 0.3,
),
),
if (favFolderItem.intro.isNotEmpty)
Text(
favFolderItem.intro,
textAlign: TextAlign.start,
style: TextStyle(
fontSize: Theme.of(context).textTheme.labelMedium!.fontSize,
color: Theme.of(context).colorScheme.outline,
),
),
Text(
'${favFolderItem.mediaCount}个内容',
textAlign: TextAlign.start,