fix: keep empty scoped badge lists authoritative

This commit is contained in:
zhx 2026-05-18 12:10:07 +08:00
parent c2b5ef9e16
commit 5a44ec0c6d
2 changed files with 30 additions and 3 deletions

View File

@ -108,9 +108,10 @@ class _SCUserBadgeStripState extends State<SCUserBadgeStrip> {
return FutureBuilder<SCUserBadgeRes>( return FutureBuilder<SCUserBadgeRes>(
future: future, future: future,
builder: (context, snapshot) { builder: (context, snapshot) {
final remoteBadges = _remoteBadges(snapshot.data); if (snapshot.hasData) {
final badges = remoteBadges.isNotEmpty ? remoteBadges : _fallbackBadges; return _buildBadges(_remoteBadges(snapshot.data), stripHeight);
return _buildBadges(badges, stripHeight); }
return _buildBadges(_fallbackBadges, stripHeight);
}, },
); );
} }

View File

@ -84,5 +84,31 @@ void main() {
'activity', '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);
});
}); });
} }