fix: dyn: temp ban

Closes #829

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-05-08 12:01:10 +08:00
parent b28882cff5
commit 222070feba
5 changed files with 49 additions and 39 deletions

View File

@@ -25,7 +25,7 @@ class DynamicsController extends GetxController
RxInt mid = (-1).obs; RxInt mid = (-1).obs;
Rx<UpItem> upInfo = UpItem().obs; Rx<UpItem> upInfo = UpItem().obs;
late TabController tabController; late TabController tabController;
RxList<int> tempBannedList = <int>[].obs; Set<int> tempBannedList = <int>{};
late List<Widget> tabsPageList; late List<Widget> tabsPageList;
RxInt initialValue = 0.obs; RxInt initialValue = 0.obs;
RxBool isLogin = false.obs; RxBool isLogin = false.obs;

View File

@@ -23,9 +23,10 @@ class AuthorPanel extends StatelessWidget {
final DynamicItemModel item; final DynamicItemModel item;
final Function? addBannedList; final Function? addBannedList;
final String? source; final String? source;
final Function? onRemove; final ValueChanged? onRemove;
final bool isSave; final bool isSave;
final Function(bool isTop, dynamic dynId)? onSetTop; final Function(bool isTop, dynamic dynId)? onSetTop;
final VoidCallback? onBlock;
const AuthorPanel({ const AuthorPanel({
super.key, super.key,
@@ -35,6 +36,7 @@ class AuthorPanel extends StatelessWidget {
this.onRemove, this.onRemove,
this.isSave = false, this.isSave = false,
this.onSetTop, this.onSetTop,
this.onBlock,
}); });
Widget _buildAvatar() { Widget _buildAvatar() {
@@ -364,11 +366,14 @@ class AuthorPanel extends StatelessWidget {
leading: const Icon(Icons.visibility_off_outlined, size: 19), leading: const Icon(Icons.visibility_off_outlined, size: 19),
onTap: () { onTap: () {
Get.back(); Get.back();
Get.find<DynamicsController>() onBlock?.call();
.tempBannedList try {
.add(item.modules.moduleAuthor!.mid!); Get.find<DynamicsController>()
SmartDialog.showToast( .tempBannedList
'已临时屏蔽${item.modules.moduleAuthor?.name}(${item.modules.moduleAuthor!.mid}),重启恢复'); .add(item.modules.moduleAuthor!.mid!);
SmartDialog.showToast(
'已临时屏蔽${item.modules.moduleAuthor?.name}(${item.modules.moduleAuthor!.mid!}),重启恢复');
} catch (_) {}
}, },
minLeadingWidth: 0, minLeadingWidth: 0,
), ),
@@ -424,7 +429,7 @@ class AuthorPanel extends StatelessWidget {
TextButton( TextButton(
onPressed: () { onPressed: () {
Get.back(); Get.back();
onRemove?.call(item.idStr); onRemove!(item.idStr);
}, },
child: const Text('确定'), child: const Text('确定'),
), ),

View File

@@ -12,10 +12,11 @@ import 'package:get/get.dart';
class DynamicPanel extends StatelessWidget { class DynamicPanel extends StatelessWidget {
final DynamicItemModel item; final DynamicItemModel item;
final String? source; final String? source;
final Function? onRemove; final ValueChanged? onRemove;
final Function(List<String>, int)? callback; final Function(List<String>, int)? callback;
final bool isSave; final bool isSave;
final Function(bool isTop, dynamic dynId)? onSetTop; final Function(bool isTop, dynamic dynId)? onSetTop;
final VoidCallback? onBlock;
const DynamicPanel({ const DynamicPanel({
super.key, super.key,
@@ -25,6 +26,7 @@ class DynamicPanel extends StatelessWidget {
this.callback, this.callback,
this.isSave = false, this.isSave = false,
this.onSetTop, this.onSetTop,
this.onBlock,
}); });
@override @override
@@ -36,6 +38,7 @@ class DynamicPanel extends StatelessWidget {
onRemove: onRemove, onRemove: onRemove,
isSave: isSave, isSave: isSave,
onSetTop: onSetTop, onSetTop: onSetTop,
onBlock: onBlock,
); );
final child = Material( final child = Material(
elevation: 0, elevation: 0,

View File

@@ -4,6 +4,7 @@ import 'package:PiliPlus/http/msg.dart';
import 'package:PiliPlus/models/common/dynamic/dynamics_type.dart'; import 'package:PiliPlus/models/common/dynamic/dynamics_type.dart';
import 'package:PiliPlus/models/dynamics/result.dart'; import 'package:PiliPlus/models/dynamics/result.dart';
import 'package:PiliPlus/pages/common/common_list_controller.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/pages/main/controller.dart';
import 'package:PiliPlus/utils/extension.dart'; import 'package:PiliPlus/utils/extension.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
@@ -16,6 +17,7 @@ class DynamicsTabController
String offset = ''; String offset = '';
int? mid; int? mid;
late final MainController mainController = Get.find<MainController>(); late final MainController mainController = Get.find<MainController>();
final dynamicsController = Get.find<DynamicsController>();
@override @override
void onInit() { void onInit() {
@@ -34,6 +36,11 @@ class DynamicsTabController
@override @override
List<DynamicItemModel>? getDataList(DynamicsDataModel response) { List<DynamicItemModel>? getDataList(DynamicsDataModel response) {
if (dynamicsType != DynamicsTabType.up &&
dynamicsController.tempBannedList.isNotEmpty) {
response.items?.removeWhere((e) => dynamicsController.tempBannedList
.contains(e.modules.moduleAuthor?.mid));
}
return response.items; return response.items;
} }
@@ -52,11 +59,12 @@ class DynamicsTabController
mid: mid, mid: mid,
); );
Future<void> onRemove(dynamic dynamicId) async { Future<void> onRemove(int index, dynamic dynamicId) async {
var res = await MsgHttp.removeDynamic(dynIdStr: dynamicId); var res = await MsgHttp.removeDynamic(dynIdStr: dynamicId);
if (res['status']) { if (res['status']) {
loadingState.value.data!.removeWhere((item) => item.idStr == dynamicId); loadingState
loadingState.refresh(); ..value.data!.removeAt(index)
..refresh();
SmartDialog.showToast('删除成功'); SmartDialog.showToast('删除成功');
} else { } else {
SmartDialog.showToast(res['msg']); SmartDialog.showToast(res['msg']);
@@ -77,4 +85,10 @@ class DynamicsTabController
scrollController.jumpToTop(); scrollController.jumpToTop();
return super.onReload(); return super.onReload();
} }
void onBlock(int index) {
loadingState
..value.data!.removeAt(index)
..refresh();
}
} }

View File

@@ -151,22 +151,15 @@ class _DynamicsTabPageState
: LastChildLayoutType.none; : LastChildLayoutType.none;
}, },
children: [ children: [
if (dynamicsController.tabController.index == 4 && for (int index = 0;
dynamicsController.mid.value != -1) ...[ index < loadingState.response!.length;
for (var i in loadingState.response!) index++)
DynamicPanel( DynamicPanel(
item: i, item: loadingState.response![index],
onRemove: controller.onRemove, onRemove: (idStr) =>
), controller.onRemove(index, idStr),
] else ...[ onBlock: () => controller.onBlock(index),
for (var i in loadingState.response!) )
if (!dynamicsController.tempBannedList
.contains(i.modules.moduleAuthor?.mid))
DynamicPanel(
item: i,
onRemove: controller.onRemove,
),
]
], ],
) )
: SliverCrossAxisGroup( : SliverCrossAxisGroup(
@@ -180,17 +173,12 @@ class _DynamicsTabPageState
controller.onLoadMore(); controller.onLoadMore();
} }
final item = loadingState.response![index]; final item = loadingState.response![index];
if ((dynamicsController.tabController.index == return DynamicPanel(
4 && item: item,
dynamicsController.mid.value != -1) || onRemove: (idStr) =>
!dynamicsController.tempBannedList.contains( controller.onRemove(index, idStr),
item.modules.moduleAuthor?.mid)) { onBlock: () => controller.onBlock(index),
return DynamicPanel( );
item: item,
onRemove: controller.onRemove,
);
}
return const SizedBox.shrink();
}, },
itemCount: loadingState.response!.length, itemCount: loadingState.response!.length,
), ),