feat: 收藏夹删除
This commit is contained in:
@ -517,4 +517,7 @@ class Api {
|
||||
|
||||
/// 创建动态
|
||||
static const String dynamicCreate = '/x/dynamic/feed/create/dyn';
|
||||
|
||||
/// 删除收藏夹
|
||||
static const String delFavFolder = '/x/v3/fav/folder/del';
|
||||
}
|
||||
|
@ -395,4 +395,21 @@ class UserHttp {
|
||||
return {'status': false, 'msg': res.data['message']};
|
||||
}
|
||||
}
|
||||
|
||||
// 删除文件夹
|
||||
static Future delFavFolder({required int mediaIds}) async {
|
||||
var res = await Request().post(
|
||||
Api.delFavFolder,
|
||||
queryParameters: {
|
||||
'media_ids': mediaIds,
|
||||
'platform': 'web',
|
||||
'csrf': await Request.getCsrf(),
|
||||
},
|
||||
);
|
||||
if (res.data['code'] == 0) {
|
||||
return {'status': true};
|
||||
} else {
|
||||
return {'status': false, 'msg': res.data['message']};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -10,6 +10,7 @@ import 'package:pilipala/utils/storage.dart';
|
||||
class FavController extends GetxController {
|
||||
final ScrollController scrollController = ScrollController();
|
||||
Rx<FavFolderData> favFolderData = FavFolderData().obs;
|
||||
RxList<FavFolderItemData> favFolderList = <FavFolderItemData>[].obs;
|
||||
Box userInfoCache = GStrorage.userInfo;
|
||||
UserInfoData? userInfo;
|
||||
int currentPage = 1;
|
||||
@ -32,9 +33,10 @@ class FavController extends GetxController {
|
||||
if (res['status']) {
|
||||
if (type == 'init') {
|
||||
favFolderData.value = res['data'];
|
||||
favFolderList.value = res['data'].list;
|
||||
} else {
|
||||
if (res['data'].list.isNotEmpty) {
|
||||
favFolderData.value.list!.addAll(res['data'].list);
|
||||
favFolderList.addAll(res['data'].list);
|
||||
favFolderData.update((val) {});
|
||||
}
|
||||
}
|
||||
@ -49,4 +51,13 @@ class FavController extends GetxController {
|
||||
Future onLoad() async {
|
||||
queryFavFolder(type: 'onload');
|
||||
}
|
||||
|
||||
removeFavFolder({required int mediaIds}) async {
|
||||
for (var i in favFolderList) {
|
||||
if (i.id == mediaIds) {
|
||||
favFolderList.remove(i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -62,11 +62,10 @@ class _FavPageState extends State<FavPage> {
|
||||
return Obx(
|
||||
() => ListView.builder(
|
||||
controller: scrollController,
|
||||
itemCount: _favController.favFolderData.value.list!.length,
|
||||
itemCount: _favController.favFolderList.length,
|
||||
itemBuilder: (context, index) {
|
||||
return FavItem(
|
||||
favFolderItem:
|
||||
_favController.favFolderData.value.list![index]);
|
||||
favFolderItem: _favController.favFolderList[index]);
|
||||
},
|
||||
),
|
||||
);
|
||||
|
@ -13,14 +13,16 @@ class FavItem extends StatelessWidget {
|
||||
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: () async {
|
||||
Get.toNamed(
|
||||
'/favDetail',
|
||||
arguments: favFolderItem,
|
||||
parameters: {
|
||||
'heroTag': heroTag,
|
||||
'mediaId': favFolderItem.id.toString(),
|
||||
},
|
||||
);
|
||||
},
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.fromLTRB(12, 7, 12, 7),
|
||||
child: LayoutBuilder(
|
||||
|
@ -1,9 +1,11 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:pilipala/http/user.dart';
|
||||
import 'package:pilipala/http/video.dart';
|
||||
import 'package:pilipala/models/user/fav_detail.dart';
|
||||
import 'package:pilipala/models/user/fav_folder.dart';
|
||||
import 'package:pilipala/pages/fav/index.dart';
|
||||
|
||||
class FavDetailController extends GetxController {
|
||||
FavFolderItemData? item;
|
||||
@ -74,4 +76,41 @@ class FavDetailController extends GetxController {
|
||||
onLoad() {
|
||||
queryUserFavFolderDetail(type: 'onLoad');
|
||||
}
|
||||
|
||||
onDelFavFolder() async {
|
||||
SmartDialog.show(
|
||||
useSystem: true,
|
||||
animationType: SmartAnimationType.centerFade_otherSlide,
|
||||
builder: (BuildContext context) {
|
||||
return AlertDialog(
|
||||
title: const Text('提示'),
|
||||
content: const Text('确定删除这个收藏夹吗?'),
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () async {
|
||||
SmartDialog.dismiss();
|
||||
},
|
||||
child: Text(
|
||||
'点错了',
|
||||
style: TextStyle(color: Theme.of(context).colorScheme.outline),
|
||||
),
|
||||
),
|
||||
TextButton(
|
||||
onPressed: () async {
|
||||
var res = await UserHttp.delFavFolder(mediaIds: mediaId!);
|
||||
SmartDialog.dismiss();
|
||||
SmartDialog.showToast(res['status'] ? '操作成功' : res['msg']);
|
||||
if (res['status']) {
|
||||
FavController favController = Get.find<FavController>();
|
||||
await favController.removeFavFolder(mediaIds: mediaId!);
|
||||
Get.back();
|
||||
}
|
||||
},
|
||||
child: const Text('确认'),
|
||||
)
|
||||
],
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -101,11 +101,19 @@ class _FavDetailPageState extends State<FavDetailPage> {
|
||||
Get.toNamed('/favSearch?searchType=0&mediaId=$mediaId'),
|
||||
icon: const Icon(Icons.search_outlined),
|
||||
),
|
||||
// IconButton(
|
||||
// onPressed: () {},
|
||||
// icon: const Icon(Icons.more_vert),
|
||||
// ),
|
||||
const SizedBox(width: 6),
|
||||
PopupMenuButton<String>(
|
||||
icon: const Icon(Icons.more_vert_outlined),
|
||||
position: PopupMenuPosition.under,
|
||||
onSelected: (String type) {},
|
||||
itemBuilder: (BuildContext context) => <PopupMenuEntry<String>>[
|
||||
PopupMenuItem<String>(
|
||||
onTap: () => _favDetailController.onDelFavFolder(),
|
||||
value: 'pause',
|
||||
child: const Text('删除收藏夹'),
|
||||
),
|
||||
],
|
||||
),
|
||||
const SizedBox(width: 14),
|
||||
],
|
||||
flexibleSpace: FlexibleSpaceBar(
|
||||
background: Container(
|
||||
|
Reference in New Issue
Block a user