show user medal

Signed-off-by: dom <githubaccount56556@proton.me>
This commit is contained in:
dom
2026-03-22 15:01:30 +08:00
parent fc7fc18b14
commit 2bebf200df
151 changed files with 1435 additions and 1321 deletions

View File

@@ -1,16 +1,17 @@
import 'package:PiliPlus/common/widgets/flutter/refresh_indicator.dart';
import 'package:PiliPlus/common/widgets/image/network_img_layer.dart';
import 'package:PiliPlus/common/widgets/loading_widget/http_error.dart';
import 'package:PiliPlus/common/widgets/loading_widget/loading_widget.dart';
import 'package:PiliPlus/common/widgets/pendant_avatar.dart';
import 'package:PiliPlus/common/widgets/scroll_physics.dart';
import 'package:PiliPlus/common/widgets/view_sliver_safe_area.dart';
import 'package:PiliPlus/http/loading_state.dart';
import 'package:PiliPlus/models/common/live/live_contribution_rank_type.dart';
import 'package:PiliPlus/models_new/live/live_contribution_rank/item.dart';
import 'package:PiliPlus/models_new/live/live_contribution_rank/medal_info.dart';
import 'package:PiliPlus/pages/live_room/contribution_rank/controller.dart';
import 'package:PiliPlus/pages/member/widget/medal_widget.dart';
import 'package:PiliPlus/utils/extension/scroll_controller_ext.dart';
import 'package:PiliPlus/utils/utils.dart';
import 'package:flutter/foundation.dart' show kDebugMode;
import 'package:flutter/material.dart';
import 'package:get/get.dart';
@@ -191,6 +192,23 @@ class _Item extends StatelessWidget {
@override
Widget build(BuildContext context) {
late final colorScheme = ColorScheme.of(context);
Widget child = Text(item.name!);
if (item.uinfoMedal case final uinfoMedal?) {
try {
child = Column(
spacing: 4,
crossAxisAlignment: .start,
children: [
child,
MedalWidget.fromMedalInfo(medal: uinfoMedal),
],
);
} catch (e, s) {
if (kDebugMode) {
Utils.reportError(e, s);
}
}
}
return InkWell(
onTap: () => Get.toNamed('/member?mid=${item.uid}'),
child: Padding(
@@ -214,34 +232,13 @@ class _Item extends StatelessWidget {
),
),
),
PendantAvatar(
avatar: item.face,
size: 42,
),
Expanded(
child: Column(
spacing: 3,
crossAxisAlignment: .start,
children: [
Text(item.name!),
Row(
children: [
if (item.medalInfo case MedalInfo(
:final medalName,
:final level,
))
Text(
'$medalName$level',
style: TextStyle(
fontSize: 12,
color: colorScheme.onSurfaceVariant,
),
),
],
),
],
),
NetworkImgLayer(
src: item.face,
width: 42,
height: 42,
type: .avatar,
),
Expanded(child: child),
if (showScore)
Text(
item.score.toString(),