From 8d83143ca60c256577b8a726a73b8476637b19a0 Mon Sep 17 00:00:00 2001 From: bggRGjQaUbCoE Date: Wed, 29 Jan 2025 15:29:20 +0800 Subject: [PATCH] opt: fav Signed-off-by: bggRGjQaUbCoE --- .../bangumi/introduction/controller.dart | 35 +++++++++++-------- lib/pages/dynamics/widgets/forward_panel.dart | 4 +-- .../video/detail/introduction/controller.dart | 34 ++++++++++-------- 3 files changed, 43 insertions(+), 30 deletions(-) diff --git a/lib/pages/bangumi/introduction/controller.dart b/lib/pages/bangumi/introduction/controller.dart index dbe7dc0a..455be819 100644 --- a/lib/pages/bangumi/introduction/controller.dart +++ b/lib/pages/bangumi/introduction/controller.dart @@ -6,6 +6,7 @@ import 'package:PiliPlus/http/user.dart'; import 'package:PiliPlus/pages/common/common_controller.dart'; import 'package:PiliPlus/pages/video/detail/introduction/controller.dart'; import 'package:PiliPlus/pages/video/detail/introduction/pay_coins_page.dart'; +import 'package:PiliPlus/utils/extension.dart'; import 'package:PiliPlus/utils/utils.dart'; import 'package:flutter/material.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; @@ -59,8 +60,7 @@ class BangumiIntroController extends CommonController { dynamic videoTags; bool isLogin = false; Rx favFolderData = FavFolderData().obs; - List addMediaIdsNew = []; - List delMediaIdsNew = []; + List? favIds; dynamic userInfo; late final enableQuickFav = @@ -314,12 +314,20 @@ class BangumiIntroController extends CommonController { }); return; } + + List addMediaIdsNew = []; + List delMediaIdsNew = []; try { for (var i in favFolderData.value.list!.toList()) { + bool isFaved = favIds?.contains(i.id) == true; if (i.favState == 1) { - addMediaIdsNew.add(i.id); + if (isFaved.not) { + addMediaIdsNew.add(i.id); + } } else { - delMediaIdsNew.add(i.id); + if (isFaved) { + delMediaIdsNew.add(i.id); + } } } } catch (_) {} @@ -330,8 +338,6 @@ class BangumiIntroController extends CommonController { delIds: delMediaIdsNew.join(','), ); if (result['status']) { - addMediaIdsNew = []; - delMediaIdsNew = []; SmartDialog.showToast('操作成功'); Get.back(); Future.delayed(const Duration(milliseconds: 255), () { @@ -394,14 +400,10 @@ class BangumiIntroController extends CommonController { onChoose(bool checkValue, int index) { feedBack(); List datalist = favFolderData.value.list!; - for (var i = 0; i < datalist.length; i++) { - if (i == index) { - datalist[i].favState = checkValue == true ? 1 : 0; - datalist[i].mediaCount = checkValue == true - ? datalist[i].mediaCount! + 1 - : datalist[i].mediaCount! - 1; - } - } + datalist[index].favState = checkValue ? 1 : 0; + datalist[index].mediaCount = checkValue + ? datalist[index].mediaCount! + 1 + : datalist[index].mediaCount! - 1; favFolderData.value.list = datalist; favFolderData.refresh(); } @@ -487,6 +489,7 @@ class BangumiIntroController extends CommonController { } Future queryVideoInFolder() async { + favIds = null; var result = await VideoHttp.videoInFolder( mid: userInfo.mid, rid: epId, // bangumi @@ -494,6 +497,10 @@ class BangumiIntroController extends CommonController { ); if (result['status']) { favFolderData.value = result['data']; + favIds = favFolderData.value.list + ?.where((item) => item.favState == 1) + .map((item) => item.id) + .toList(); } return result; } diff --git a/lib/pages/dynamics/widgets/forward_panel.dart b/lib/pages/dynamics/widgets/forward_panel.dart index b199c314..f867cba4 100644 --- a/lib/pages/dynamics/widgets/forward_panel.dart +++ b/lib/pages/dynamics/widgets/forward_panel.dart @@ -103,8 +103,8 @@ Widget forWard(item, context, source, callback, {floor = 1}) { picsNodes(item.modules.moduleDynamic.major.opus.pics, callback), // semanticsLabel: '动态图片', ), - if (item.modules.moduleDynamic.additional != null) - const SizedBox(height: 4), + // if (item.modules.moduleDynamic.additional != null) + // const SizedBox(height: 4), ], const SizedBox(height: 4), ], diff --git a/lib/pages/video/detail/introduction/controller.dart b/lib/pages/video/detail/introduction/controller.dart index da609421..29c52677 100644 --- a/lib/pages/video/detail/introduction/controller.dart +++ b/lib/pages/video/detail/introduction/controller.dart @@ -61,8 +61,7 @@ class VideoIntroController extends GetxController RxBool hasFav = false.obs; bool isLogin = false; Rx favFolderData = FavFolderData().obs; - List addMediaIdsNew = []; - List delMediaIdsNew = []; + List? favIds; // 关注状态 默认未关注 RxMap followStatus = {}.obs; @@ -414,12 +413,20 @@ class VideoIntroController extends GetxController }); return; } + + List addMediaIdsNew = []; + List delMediaIdsNew = []; try { for (var i in favFolderData.value.list!.toList()) { + bool isFaved = favIds?.contains(i.id) == true; if (i.favState == 1) { - addMediaIdsNew.add(i.id); + if (isFaved.not) { + addMediaIdsNew.add(i.id); + } } else { - delMediaIdsNew.add(i.id); + if (isFaved) { + delMediaIdsNew.add(i.id); + } } } } catch (e) { @@ -433,8 +440,6 @@ class VideoIntroController extends GetxController ); SmartDialog.dismiss(); if (result['status']) { - addMediaIdsNew = []; - delMediaIdsNew = []; Get.back(); // 重新获取收藏状态 await queryHasFavVideo(); @@ -495,10 +500,15 @@ class VideoIntroController extends GetxController } Future queryVideoInFolder() async { + favIds = null; var result = await VideoHttp.videoInFolder( mid: userInfo.mid, rid: IdUtils.bv2av(bvid)); if (result['status']) { favFolderData.value = result['data']; + favIds = favFolderData.value.list + ?.where((item) => item.favState == 1) + .map((item) => item.id) + .toList(); } return result; } @@ -507,14 +517,10 @@ class VideoIntroController extends GetxController onChoose(bool checkValue, int index) { feedBack(); List datalist = favFolderData.value.list!; - for (var i = 0; i < datalist.length; i++) { - if (i == index) { - datalist[i].favState = checkValue == true ? 1 : 0; - datalist[i].mediaCount = checkValue == true - ? datalist[i].mediaCount! + 1 - : datalist[i].mediaCount! - 1; - } - } + datalist[index].favState = checkValue ? 1 : 0; + datalist[index].mediaCount = checkValue + ? datalist[index].mediaCount! + 1 + : datalist[index].mediaCount! - 1; favFolderData.value.list = datalist; favFolderData.refresh(); }