diff --git a/lib/pages/dynamics/controller.dart b/lib/pages/dynamics/controller.dart index 1dc35675..13259748 100644 --- a/lib/pages/dynamics/controller.dart +++ b/lib/pages/dynamics/controller.dart @@ -25,7 +25,7 @@ class DynamicsController extends GetxController RxInt mid = (-1).obs; Rx upInfo = UpItem().obs; late TabController tabController; - RxList tempBannedList = [].obs; + Set tempBannedList = {}; late List tabsPageList; RxInt initialValue = 0.obs; RxBool isLogin = false.obs; diff --git a/lib/pages/dynamics/widgets/author_panel.dart b/lib/pages/dynamics/widgets/author_panel.dart index 6e04a836..6f10cdd9 100644 --- a/lib/pages/dynamics/widgets/author_panel.dart +++ b/lib/pages/dynamics/widgets/author_panel.dart @@ -23,9 +23,10 @@ class AuthorPanel extends StatelessWidget { final DynamicItemModel item; final Function? addBannedList; final String? source; - final Function? onRemove; + final ValueChanged? onRemove; final bool isSave; final Function(bool isTop, dynamic dynId)? onSetTop; + final VoidCallback? onBlock; const AuthorPanel({ super.key, @@ -35,6 +36,7 @@ class AuthorPanel extends StatelessWidget { this.onRemove, this.isSave = false, this.onSetTop, + this.onBlock, }); Widget _buildAvatar() { @@ -364,11 +366,14 @@ class AuthorPanel extends StatelessWidget { leading: const Icon(Icons.visibility_off_outlined, size: 19), onTap: () { Get.back(); - Get.find() - .tempBannedList - .add(item.modules.moduleAuthor!.mid!); - SmartDialog.showToast( - '已临时屏蔽${item.modules.moduleAuthor?.name}(${item.modules.moduleAuthor!.mid}),重启恢复'); + onBlock?.call(); + try { + Get.find() + .tempBannedList + .add(item.modules.moduleAuthor!.mid!); + SmartDialog.showToast( + '已临时屏蔽${item.modules.moduleAuthor?.name}(${item.modules.moduleAuthor!.mid!}),重启恢复'); + } catch (_) {} }, minLeadingWidth: 0, ), @@ -424,7 +429,7 @@ class AuthorPanel extends StatelessWidget { TextButton( onPressed: () { Get.back(); - onRemove?.call(item.idStr); + onRemove!(item.idStr); }, child: const Text('确定'), ), diff --git a/lib/pages/dynamics/widgets/dynamic_panel.dart b/lib/pages/dynamics/widgets/dynamic_panel.dart index 7e21f669..fe3e00d4 100644 --- a/lib/pages/dynamics/widgets/dynamic_panel.dart +++ b/lib/pages/dynamics/widgets/dynamic_panel.dart @@ -12,10 +12,11 @@ import 'package:get/get.dart'; class DynamicPanel extends StatelessWidget { final DynamicItemModel item; final String? source; - final Function? onRemove; + final ValueChanged? onRemove; final Function(List, int)? callback; final bool isSave; final Function(bool isTop, dynamic dynId)? onSetTop; + final VoidCallback? onBlock; const DynamicPanel({ super.key, @@ -25,6 +26,7 @@ class DynamicPanel extends StatelessWidget { this.callback, this.isSave = false, this.onSetTop, + this.onBlock, }); @override @@ -36,6 +38,7 @@ class DynamicPanel extends StatelessWidget { onRemove: onRemove, isSave: isSave, onSetTop: onSetTop, + onBlock: onBlock, ); final child = Material( elevation: 0, diff --git a/lib/pages/dynamics_tab/controller.dart b/lib/pages/dynamics_tab/controller.dart index c9a868cb..5b1cb50c 100644 --- a/lib/pages/dynamics_tab/controller.dart +++ b/lib/pages/dynamics_tab/controller.dart @@ -4,6 +4,7 @@ import 'package:PiliPlus/http/msg.dart'; import 'package:PiliPlus/models/common/dynamic/dynamics_type.dart'; import 'package:PiliPlus/models/dynamics/result.dart'; import 'package:PiliPlus/pages/common/common_list_controller.dart'; +import 'package:PiliPlus/pages/dynamics/controller.dart'; import 'package:PiliPlus/pages/main/controller.dart'; import 'package:PiliPlus/utils/extension.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; @@ -16,6 +17,7 @@ class DynamicsTabController String offset = ''; int? mid; late final MainController mainController = Get.find(); + final dynamicsController = Get.find(); @override void onInit() { @@ -34,6 +36,11 @@ class DynamicsTabController @override List? getDataList(DynamicsDataModel response) { + if (dynamicsType != DynamicsTabType.up && + dynamicsController.tempBannedList.isNotEmpty) { + response.items?.removeWhere((e) => dynamicsController.tempBannedList + .contains(e.modules.moduleAuthor?.mid)); + } return response.items; } @@ -52,11 +59,12 @@ class DynamicsTabController mid: mid, ); - Future onRemove(dynamic dynamicId) async { + Future onRemove(int index, dynamic dynamicId) async { var res = await MsgHttp.removeDynamic(dynIdStr: dynamicId); if (res['status']) { - loadingState.value.data!.removeWhere((item) => item.idStr == dynamicId); - loadingState.refresh(); + loadingState + ..value.data!.removeAt(index) + ..refresh(); SmartDialog.showToast('删除成功'); } else { SmartDialog.showToast(res['msg']); @@ -77,4 +85,10 @@ class DynamicsTabController scrollController.jumpToTop(); return super.onReload(); } + + void onBlock(int index) { + loadingState + ..value.data!.removeAt(index) + ..refresh(); + } } diff --git a/lib/pages/dynamics_tab/view.dart b/lib/pages/dynamics_tab/view.dart index 9d806563..b869227e 100644 --- a/lib/pages/dynamics_tab/view.dart +++ b/lib/pages/dynamics_tab/view.dart @@ -151,22 +151,15 @@ class _DynamicsTabPageState : LastChildLayoutType.none; }, children: [ - if (dynamicsController.tabController.index == 4 && - dynamicsController.mid.value != -1) ...[ - for (var i in loadingState.response!) - DynamicPanel( - item: i, - onRemove: controller.onRemove, - ), - ] else ...[ - for (var i in loadingState.response!) - if (!dynamicsController.tempBannedList - .contains(i.modules.moduleAuthor?.mid)) - DynamicPanel( - item: i, - onRemove: controller.onRemove, - ), - ] + for (int index = 0; + index < loadingState.response!.length; + index++) + DynamicPanel( + item: loadingState.response![index], + onRemove: (idStr) => + controller.onRemove(index, idStr), + onBlock: () => controller.onBlock(index), + ) ], ) : SliverCrossAxisGroup( @@ -180,17 +173,12 @@ class _DynamicsTabPageState controller.onLoadMore(); } final item = loadingState.response![index]; - if ((dynamicsController.tabController.index == - 4 && - dynamicsController.mid.value != -1) || - !dynamicsController.tempBannedList.contains( - item.modules.moduleAuthor?.mid)) { - return DynamicPanel( - item: item, - onRemove: controller.onRemove, - ); - } - return const SizedBox.shrink(); + return DynamicPanel( + item: item, + onRemove: (idStr) => + controller.onRemove(index, idStr), + onBlock: () => controller.onBlock(index), + ); }, itemCount: loadingState.response!.length, ),