diff --git a/lib/common/widgets/video_card_h.dart b/lib/common/widgets/video_card_h.dart index 07da906a..bdd004c4 100644 --- a/lib/common/widgets/video_card_h.dart +++ b/lib/common/widgets/video_card_h.dart @@ -7,6 +7,7 @@ import 'package:pilipala/common/widgets/stat/danmu.dart'; import 'package:pilipala/common/widgets/stat/view.dart'; import 'package:pilipala/http/search.dart'; import 'package:pilipala/http/user.dart'; +import 'package:pilipala/pages/member/index.dart'; import 'package:pilipala/utils/utils.dart'; import 'package:pilipala/common/widgets/network_img_layer.dart'; @@ -222,6 +223,20 @@ class VideoContent extends StatelessWidget { ], ), ), + PopupMenuItem( + onTap: () async { + MemberController().blockUser(videoItem.mid); + }, + value: 'block', + height: 35, + child: const Row( + children: [ + Icon(Icons.block, size: 16), + SizedBox(width: 6), + Text('拉黑up', style: TextStyle(fontSize: 13)) + ], + ), + ), ], ), ), diff --git a/lib/http/search.dart b/lib/http/search.dart index 926efe9f..211d82c8 100644 --- a/lib/http/search.dart +++ b/lib/http/search.dart @@ -1,11 +1,14 @@ +import 'package:hive/hive.dart'; import 'package:pilipala/http/index.dart'; import 'package:pilipala/models/bangumi/info.dart'; import 'package:pilipala/models/common/search_type.dart'; import 'package:pilipala/models/search/hot.dart'; import 'package:pilipala/models/search/result.dart'; import 'package:pilipala/models/search/suggest.dart'; +import 'package:pilipala/utils/storage.dart'; class SearchHttp { + static Box setting = GStrorage.setting; static Future hotSearchList() async { var res = await Request().get(Api.hotSearchList); if (res.data['code'] == 0) { @@ -63,6 +66,12 @@ class SearchHttp { Object data; switch (searchType) { case SearchType.video: + List blackMidsList = + setting.get(SettingBoxKey.blackMidsList, defaultValue: [-1]); + for (var i in res.data['data']['result']) { + // 屏蔽推广和拉黑用户 + i['available'] = !blackMidsList.contains(i['mid']); + } data = SearchVideoModel.fromJson(res.data['data']); break; // case SearchType.live_room: diff --git a/lib/models/search/result.dart b/lib/models/search/result.dart index 91070215..72b9cd92 100644 --- a/lib/models/search/result.dart +++ b/lib/models/search/result.dart @@ -6,6 +6,7 @@ class SearchVideoModel { List? list; SearchVideoModel.fromJson(Map json) { list = json['result'] + .where((e) => e['available'] == true) .map((e) => SearchVideoItemModel.fromJson(e)) .toList(); } @@ -17,7 +18,7 @@ class SearchVideoItemModel { this.id, this.cid, // this.author, - // this.mid, + this.mid, // this.typeid, // this.typename, this.arcurl, @@ -47,7 +48,7 @@ class SearchVideoItemModel { int? id; int? cid; // String? author; - // String? mid; + int? mid; // String? typeid; // String? typename; String? arcurl; @@ -80,6 +81,7 @@ class SearchVideoItemModel { arcurl = json['arcurl']; aid = json['aid']; bvid = json['bvid']; + mid = json['mid']; // title = json['title'].replaceAll(RegExp(r'<.*?>'), ''); title = Em.regTitle(json['title']); description = json['description']; diff --git a/lib/pages/member/controller.dart b/lib/pages/member/controller.dart index da1955b2..81aa45d1 100644 --- a/lib/pages/member/controller.dart +++ b/lib/pages/member/controller.dart @@ -95,4 +95,43 @@ class MemberController extends GetxController { }, ); } + + // 拉黑用户 + Future blockUser(int mid) async { + if (userInfoCache.get('userInfoCache') == null) { + SmartDialog.showToast('账号未登录'); + return; + } + SmartDialog.show( + useSystem: true, + animationType: SmartAnimationType.centerFade_otherSlide, + builder: (BuildContext context) { + return AlertDialog( + title: const Text('提示'), + content: const Text('确定拉黑UP主?'), + actions: [ + TextButton( + onPressed: () => SmartDialog.dismiss(), + child: Text( + '点错了', + style: TextStyle(color: Theme.of(context).colorScheme.outline), + ), + ), + TextButton( + onPressed: () async { + var res = await VideoHttp.relationMod( + mid: mid, + act: 5, + reSrc: 11, + ); + SmartDialog.dismiss(); + if (res['status']) {} + }, + child: const Text('确认'), + ) + ], + ); + }, + ); + } }