更新应用配置以添加主裁判计分 H5 链接;

重构事件注册模型以支持团队成员信息,并简化事件信息页面的导航逻辑。
This commit is contained in:
2026-07-20 10:10:51 +08:00
parent 4e0a675198
commit e5b6246458
4 changed files with 507 additions and 12 deletions
@@ -43,6 +43,27 @@ class EventProfile {
final String avatarLabel;
}
class EventTeamMember {
const EventTeamMember({
required this.userId,
required this.name,
required this.isLeader,
});
final String userId;
final String name;
final bool isLeader;
factory EventTeamMember.fromJson(Map<dynamic, dynamic> json) {
final map = Map<String, dynamic>.from(json);
return EventTeamMember(
userId: _readString(map, const ['userId']),
name: _readString(map, const ['name']),
isLeader: _readBool(map, const ['isLeader']),
);
}
}
class EventRegistrationList {
const EventRegistrationList({
required this.userId,
@@ -111,7 +132,7 @@ class EventRegistrationItem {
this.completed = false,
this.opponentId = '',
this.opponentName = '',
this.teamMembers,
this.teamMembers = const [],
this.userId = '',
this.playerName = '',
this.playerPhone = '',
@@ -129,18 +150,24 @@ class EventRegistrationItem {
final bool completed;
final String opponentId;
final String opponentName;
final List<dynamic>? teamMembers;
final List<EventTeamMember> teamMembers;
/// 来自报名列表父级,不在 item JSON 内
final String userId;
final String playerName;
final String playerPhone;
String get scheduleTime =>
_formatScheduleTime(matchStartTime, matchEndTime);
String get scheduleTime => _formatScheduleTime(matchStartTime, matchEndTime);
String? get statusLabel => completed ? '已完成' : null;
EventTeamMember? get teamLeader {
for (final member in teamMembers) {
if (member.isLeader) return member;
}
return teamMembers.isEmpty ? null : teamMembers.first;
}
factory EventRegistrationItem.fromJson(
Map<dynamic, dynamic> json, {
String userId = '',
@@ -164,8 +191,11 @@ class EventRegistrationItem {
opponentId: _readString(map, const ['opponentId']),
opponentName: _readString(map, const ['opponentName']),
teamMembers: teamMembersRaw is List
? List<dynamic>.from(teamMembersRaw)
: null,
? teamMembersRaw
.whereType<Map>()
.map(EventTeamMember.fromJson)
.toList(growable: false)
: const [],
userId: userId,
playerName: playerName,
);