From bc26e79bf9c0b4f78db024dc959fb5e07c961bd8 Mon Sep 17 00:00:00 2001 From: guozhigq Date: Sat, 9 Mar 2024 00:22:58 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=8F=96=E6=B6=88=E8=AE=A2=E9=98=85=20?= =?UTF-8?q?issues=20#606?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/http/api.dart | 3 ++ lib/http/user.dart | 17 +++++++++++ lib/pages/subscription/controller.dart | 37 ++++++++++++++++++++++++ lib/pages/subscription/view.dart | 11 +++++-- lib/pages/subscription/widgets/item.dart | 23 +++++++++++++-- 5 files changed, 86 insertions(+), 5 deletions(-) diff --git a/lib/http/api.dart b/lib/http/api.dart index 3a23ef80..14c4cc63 100644 --- a/lib/http/api.dart +++ b/lib/http/api.dart @@ -490,6 +490,9 @@ class Api { /// 我的订阅详情 static const userSubFolderDetail = '/x/space/fav/season/list'; + /// 取消订阅 + static const userSubCancel = '/x/v3/fav/season/unfav'; + /// 表情 static const emojiList = '/x/emote/user/panel/web'; diff --git a/lib/http/user.dart b/lib/http/user.dart index 7d3def4e..3ed0e68f 100644 --- a/lib/http/user.dart +++ b/lib/http/user.dart @@ -349,4 +349,21 @@ class UserHttp { return {'status': false, 'msg': res.data['message']}; } } + + // 取消订阅 + static Future userSubCancel({required int seasonId}) async { + var res = await Request().post( + Api.userSubCancel, + queryParameters: { + 'season_id': seasonId, + 'platform': 'web', + 'csrf': await Request.getCsrf(), + }, + ); + if (res.data['code'] == 0) { + return {'status': true, 'msg': '取消订阅成功'}; + } else { + return {'status': false, 'msg': res.data['message']}; + } + } } diff --git a/lib/pages/subscription/controller.dart b/lib/pages/subscription/controller.dart index bf0c593c..3b40e30f 100644 --- a/lib/pages/subscription/controller.dart +++ b/lib/pages/subscription/controller.dart @@ -46,4 +46,41 @@ class SubController extends GetxController { Future onLoad() async { querySubFolder(type: 'onload'); } + + // 取消订阅 + Future cancelSub({required int id}) async { + showDialog( + context: Get.context!, + builder: (context) { + return AlertDialog( + title: const Text('提示'), + content: const Text('确认要取消订阅吗?'), + actions: [ + TextButton( + onPressed: () => Get.back(), + child: Text( + '取消', + style: + TextStyle(color: Theme.of(context).colorScheme.outline), + )), + TextButton( + onPressed: () async { + Get.back(); + var res = await UserHttp.userSubCancel(seasonId: id); + if (res['status']) { + SmartDialog.showToast('取消订阅成功'); + subFolderData.value.list! + .removeWhere((element) => element.id == id); + subFolderData.update((val) {}); + } else { + SmartDialog.showToast(res['msg']); + } + }, + child: const Text('确认'), + ) + ], + ); + }, + ); + } } diff --git a/lib/pages/subscription/view.dart b/lib/pages/subscription/view.dart index 1eee4a4f..ee8d95c9 100644 --- a/lib/pages/subscription/view.dart +++ b/lib/pages/subscription/view.dart @@ -57,8 +57,15 @@ class _SubPageState extends State { itemCount: _subController.subFolderData.value.list!.length, itemBuilder: (context, index) { return SubItem( - subFolderItem: - _subController.subFolderData.value.list![index]); + subFolderItem: + _subController.subFolderData.value.list![index], + fuc: () { + _subController.cancelSub( + id: _subController + .subFolderData.value.list![index].id!, + ); + }, + ); }, ), ); diff --git a/lib/pages/subscription/widgets/item.dart b/lib/pages/subscription/widgets/item.dart index fd08ffa5..260928de 100644 --- a/lib/pages/subscription/widgets/item.dart +++ b/lib/pages/subscription/widgets/item.dart @@ -8,7 +8,8 @@ import '../../../models/user/sub_folder.dart'; class SubItem extends StatelessWidget { final SubFolderItemData subFolderItem; - const SubItem({super.key, required this.subFolderItem}); + final Function fuc; + const SubItem({super.key, required this.subFolderItem, required this.fuc}); @override Widget build(BuildContext context) { @@ -51,7 +52,7 @@ class SubItem extends StatelessWidget { }, ), ), - VideoContent(subFolderItem: subFolderItem) + VideoContent(subFolderItem: subFolderItem, fuc: fuc) ], ), ); @@ -64,7 +65,9 @@ class SubItem extends StatelessWidget { class VideoContent extends StatelessWidget { final SubFolderItemData subFolderItem; - const VideoContent({super.key, required this.subFolderItem}); + final Function fuc; + const VideoContent( + {super.key, required this.subFolderItem, required this.fuc}); @override Widget build(BuildContext context) { @@ -100,6 +103,20 @@ class VideoContent extends StatelessWidget { color: Theme.of(context).colorScheme.outline, ), ), + const Spacer(), + SizedBox( + height: 34, + child: TextButton( + onPressed: () => fuc(), + style: TextButton.styleFrom( + padding: const EdgeInsets.fromLTRB(15, 0, 15, 0), + foregroundColor: Theme.of(context).colorScheme.outline, + backgroundColor: + Theme.of(context).colorScheme.onInverseSurface, // 设置按钮背景色 + ), + child: const Text('取消订阅'), + ), + ), ], ), ),