From 5a44ec0c6daf250e489dbc0feed654b1e4cfd2f0 Mon Sep 17 00:00:00 2001 From: zhx Date: Mon, 18 May 2026 12:10:07 +0800 Subject: [PATCH] fix: keep empty scoped badge lists authoritative --- .../widgets/badge/sc_user_badge_strip.dart | 7 ++--- test/sc_user_badge_res_test.dart | 26 +++++++++++++++++++ 2 files changed, 30 insertions(+), 3 deletions(-) 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 b42462f..f6f68d2 100644 --- a/lib/ui_kit/widgets/badge/sc_user_badge_strip.dart +++ b/lib/ui_kit/widgets/badge/sc_user_badge_strip.dart @@ -108,9 +108,10 @@ class _SCUserBadgeStripState extends State { return FutureBuilder( future: future, builder: (context, snapshot) { - final remoteBadges = _remoteBadges(snapshot.data); - final badges = remoteBadges.isNotEmpty ? remoteBadges : _fallbackBadges; - return _buildBadges(badges, stripHeight); + if (snapshot.hasData) { + return _buildBadges(_remoteBadges(snapshot.data), stripHeight); + } + return _buildBadges(_fallbackBadges, stripHeight); }, ); } diff --git a/test/sc_user_badge_res_test.dart b/test/sc_user_badge_res_test.dart index b59ed8e..88bfb9e 100644 --- a/test/sc_user_badge_res_test.dart +++ b/test/sc_user_badge_res_test.dart @@ -84,5 +84,31 @@ void main() { 'activity', ]); }); + + test('does not expose long badges as short display badges', () { + final result = SCUserBadgeRes.fromJson({ + 'longBadges': [ + { + 'id': 'long-one', + 'type': 'LONG', + 'selectUrl': 'https://example.com/long-one.png', + }, + { + 'id': 'vip-one', + 'sourceType': 'VIP', + 'selectUrl': 'https://example.com/vip-one.png', + }, + ], + 'shortBadges': [], + }); + + expect(result.longDisplayBadges.map((badge) => badge.id), [ + 'long-one', + 'vip-one', + ]); + expect(result.shortDisplayBadges, isEmpty); + expect(result.displayBadges, isEmpty); + expect(result.honorWallBadges, isEmpty); + }); }); }