From 9f012fdb27b561ddce681c3137a900c9091ff1dc Mon Sep 17 00:00:00 2001 From: zhx Date: Mon, 18 May 2026 11:09:55 +0800 Subject: [PATCH] fix: filter long badges from short badge strips --- .../models/res/sc_user_badge_res.dart | 35 +++++++++++++------ .../widgets/badge/sc_user_badge_strip.dart | 1 + test/sc_user_badge_res_test.dart | 11 +++--- 3 files changed, 32 insertions(+), 15 deletions(-) diff --git a/lib/shared/business_logic/models/res/sc_user_badge_res.dart b/lib/shared/business_logic/models/res/sc_user_badge_res.dart index 4fbbca3..00fb829 100644 --- a/lib/shared/business_logic/models/res/sc_user_badge_res.dart +++ b/lib/shared/business_logic/models/res/sc_user_badge_res.dart @@ -32,18 +32,23 @@ class SCUserBadgeRes { final List longBadges; final List shortBadges; - List get displayBadges { + List get allBadges { if (longBadges.isNotEmpty || shortBadges.isNotEmpty) { return [...longBadges, ...shortBadges]; } return badges; } + List get displayBadges { + final source = shortBadges.isNotEmpty ? shortBadges : badges; + return source.where(isShortDisplayBadge).toList(); + } + List get honorWallBadges { final source = shortBadges.isNotEmpty - ? shortBadges - : displayBadges.where(_isHonorWallBadge).toList(); + ? shortBadges.where(_isHonorWallBadge).toList() + : allBadges.where(_isHonorWallBadge).toList(); final result = source.where((badge) => _badgeUrl(badge).isNotEmpty).toList(); result.sort((a, b) => _badgeSortValue(b).compareTo(_badgeSortValue(a))); @@ -103,20 +108,30 @@ class SCUserBadgeRes { type == "ACHIEVEMENT"; } - static bool _isHonorWallBadge(WearBadge badge) { + static bool isShortDisplayBadge(WearBadge badge) { final sourceType = badge.sourceType?.trim().toUpperCase() ?? ""; final type = badge.type?.trim().toUpperCase() ?? ""; if (type == "LONG" || type == "VIP" || sourceType == "VIP") { return false; } if (sourceType.isNotEmpty) { - return sourceType == "ACTIVITY" || sourceType == "ACHIEVEMENT"; + return sourceType == "ACTIVITY" || + sourceType == "ACHIEVEMENT" || + sourceType == "HONOR_ACTIVITY" || + sourceType == "HONOR_ADMIN"; } - return type == "SHORT" || - type == "ACTIVITY" || - type == "ACHIEVEMENT" || - type == "HONOR_ACTIVITY" || - type == "HONOR_ADMIN"; + if (type.isNotEmpty) { + return type == "SHORT" || + type == "ACTIVITY" || + type == "ACHIEVEMENT" || + type == "HONOR_ACTIVITY" || + type == "HONOR_ADMIN"; + } + return true; + } + + static bool _isHonorWallBadge(WearBadge badge) { + return isShortDisplayBadge(badge); } static int _badgeSortValue(WearBadge badge) { diff --git a/lib/ui_kit/widgets/badge/sc_user_badge_strip.dart b/lib/ui_kit/widgets/badge/sc_user_badge_strip.dart index bee2363..41c90c5 100644 --- a/lib/ui_kit/widgets/badge/sc_user_badge_strip.dart +++ b/lib/ui_kit/widgets/badge/sc_user_badge_strip.dart @@ -110,6 +110,7 @@ class _SCUserBadgeStripState extends State { List get _fallbackBadges { return widget.fallbackBadges + .where(SCUserBadgeRes.isShortDisplayBadge) .where((badge) => _badgeUrl(badge).isNotEmpty) .toList(); } diff --git a/test/sc_user_badge_res_test.dart b/test/sc_user_badge_res_test.dart index 59b40b5..38ad475 100644 --- a/test/sc_user_badge_res_test.dart +++ b/test/sc_user_badge_res_test.dart @@ -32,11 +32,8 @@ void main() { ], }); - expect(result.displayBadges.map((badge) => badge.id), [ - 'vip', - 'old', - 'new', - ]); + expect(result.allBadges.map((badge) => badge.id), ['vip', 'old', 'new']); + expect(result.displayBadges.map((badge) => badge.id), ['old', 'new']); expect(result.honorWallBadges.map((badge) => badge.id), ['new', 'old']); }); @@ -73,6 +70,10 @@ void main() { ], }); + expect(result.displayBadges.map((badge) => badge.id), [ + 'activity', + 'achievement', + ]); expect(result.honorWallBadges.map((badge) => badge.id), [ 'achievement', 'activity',