Merge branch 'linfeng/drone_scoring/dev_1.1.0/2026630' into linfeng/drone_video/dev_1.1.0/20260707

This commit is contained in:
2026-07-28 10:54:27 +08:00
275 changed files with 95923 additions and 409 deletions
@@ -50,6 +50,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,
@@ -118,7 +139,7 @@ class EventRegistrationItem {
this.completed = false,
this.opponentId = '',
this.opponentName = '',
this.teamMembers,
this.teamMembers = const [],
this.userId = '',
this.playerName = '',
this.playerPhone = '',
@@ -136,7 +157,7 @@ class EventRegistrationItem {
final bool completed;
final String opponentId;
final String opponentName;
final List<dynamic>? teamMembers;
final List<EventTeamMember> teamMembers;
/// 来自报名列表父级,不在 item JSON 内
final String userId;
@@ -147,6 +168,13 @@ class EventRegistrationItem {
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 = '',
@@ -170,8 +198,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,
);