mirror of
https://github.com/HChaZZY/PiliPlus.git
synced 2025-12-06 09:13:48 +08:00
fix: dyn: temp ban
Closes #829 Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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('确定'),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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,
|
||||||
),
|
),
|
||||||
|
|||||||
Reference in New Issue
Block a user