diff --git a/lib/http/dynamics.dart b/lib/http/dynamics.dart index b956d76f..cb27257e 100644 --- a/lib/http/dynamics.dart +++ b/lib/http/dynamics.dart @@ -9,6 +9,7 @@ class DynamicsHttp { String? type, String? offset, int? mid, + required bool antiGoodsDyn, }) async { Map data = { 'type': type ?? 'all', @@ -24,6 +25,11 @@ class DynamicsHttp { if (res.data['code'] == 0) { try { DynamicsDataModel data = DynamicsDataModel.fromJson(res.data['data']); + if (antiGoodsDyn) { + data.items?.removeWhere((item) => + item.modules?.moduleDynamic?.additional?.type == + 'ADDITIONAL_TYPE_GOODS'); + } return LoadingState.success(data); } catch (err) { return LoadingState.error(err.toString()); diff --git a/lib/http/member.dart b/lib/http/member.dart index 66bdf6e0..2e737f69 100644 --- a/lib/http/member.dart +++ b/lib/http/member.dart @@ -402,7 +402,11 @@ class MemberHttp { } // 用户动态 - static Future memberDynamic({String? offset, int? mid}) async { + static Future memberDynamic({ + String? offset, + int? mid, + required bool antiGoodsDyn, + }) async { String dmImgStr = Utils.base64EncodeRandomString(16, 64); String dmCoverImgStr = Utils.base64EncodeRandomString(32, 128); Map params = await WbiSign().makSign({ @@ -421,7 +425,13 @@ class MemberHttp { }); var res = await Request().get(Api.memberDynamic, queryParameters: params); if (res.data['code'] == 0) { - return LoadingState.success(DynamicsDataModel.fromJson(res.data['data'])); + DynamicsDataModel data = DynamicsDataModel.fromJson(res.data['data']); + if (antiGoodsDyn) { + data.items?.removeWhere((item) => + item.modules?.moduleDynamic?.additional?.type == + 'ADDITIONAL_TYPE_GOODS'); + } + return LoadingState.success(data); } else { Map errMap = { -352: '风控校验失败,请检查登录状态', diff --git a/lib/pages/dynamics/tab/controller.dart b/lib/pages/dynamics/tab/controller.dart index 47494a2a..38669d5c 100644 --- a/lib/pages/dynamics/tab/controller.dart +++ b/lib/pages/dynamics/tab/controller.dart @@ -2,6 +2,7 @@ import 'package:PiliPlus/http/loading_state.dart'; import 'package:PiliPlus/http/msg.dart'; import 'package:PiliPlus/pages/common/common_controller.dart'; import 'package:PiliPlus/pages/main/controller.dart'; +import 'package:PiliPlus/utils/storage.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; @@ -41,11 +42,14 @@ class DynamicsTabController extends CommonController { return true; } + late final antiGoodsDyn = GStorage.antiGoodsDyn; + @override Future customGetData() => DynamicsHttp.followDynamic( type: dynamicsType == "up" ? "all" : dynamicsType, offset: offset, mid: dynamicsType == "up" ? mid : -1, + antiGoodsDyn: antiGoodsDyn, ); Future onRemove(dynamic dynamicId) async { diff --git a/lib/pages/member_dynamics/controller.dart b/lib/pages/member_dynamics/controller.dart index 5aefe8e1..ae29bc6c 100644 --- a/lib/pages/member_dynamics/controller.dart +++ b/lib/pages/member_dynamics/controller.dart @@ -4,12 +4,14 @@ import 'package:PiliPlus/pages/common/common_controller.dart'; import 'package:PiliPlus/utils/extension.dart'; import 'package:PiliPlus/http/member.dart'; import 'package:PiliPlus/models/dynamics/result.dart'; +import 'package:PiliPlus/utils/storage.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; class MemberDynamicsController extends CommonController { MemberDynamicsController(this.mid); int mid; String offset = ''; + late final antiGoodsDyn = GStorage.antiGoodsDyn; @override void onInit() async { @@ -47,6 +49,7 @@ class MemberDynamicsController extends CommonController { Future customGetData() => MemberHttp.memberDynamic( offset: offset, mid: mid, + antiGoodsDyn: antiGoodsDyn, ); Future onRemove(dynamicId) async { diff --git a/lib/pages/setting/widgets/model.dart b/lib/pages/setting/widgets/model.dart index dbcf6357..35dc9aa9 100644 --- a/lib/pages/setting/widgets/model.dart +++ b/lib/pages/setting/widgets/model.dart @@ -1967,6 +1967,19 @@ List get extraSettings => [ setKey: SettingBoxKey.enableCommAntifraud, defaultVal: false, ), + SettingsModel( + settingsType: SettingsType.sw1tch, + title: '屏蔽带货动态', + leading: Stack( + alignment: Alignment.center, + children: [ + Icon(Icons.shopping_bag_outlined, size: 14), + Icon(Icons.not_interested), + ], + ), + setKey: SettingBoxKey.antiGoodsDyn, + defaultVal: false, + ), SettingsModel( settingsType: SettingsType.sw1tch, enableFeedback: true, diff --git a/lib/utils/storage.dart b/lib/utils/storage.dart index 593eb242..ee2dc9ea 100644 --- a/lib/utils/storage.dart +++ b/lib/utils/storage.dart @@ -372,6 +372,9 @@ class GStorage { static bool get isPureBlackTheme => GStorage.setting.get(SettingBoxKey.isPureBlackTheme, defaultValue: false); + static bool get antiGoodsDyn => + GStorage.setting.get(SettingBoxKey.antiGoodsDyn, defaultValue: false); + static List get dynamicDetailRatio => List.from(setting .get(SettingBoxKey.dynamicDetailRatio, defaultValue: [60.0, 40.0])); @@ -605,6 +608,7 @@ class SettingBoxKey { enableCommAntifraud = 'enableCommAntifraud', coinWithLike = 'coinWithLike', isPureBlackTheme = 'isPureBlackTheme', + antiGoodsDyn = 'antiGoodsDyn', // Sponsor Block enableSponsorBlock = 'enableSponsorBlock',