Skip to content

Commit a49715f

Browse files
authored
feat: 걸음 수 화면과 유저 아이콘 연결 (#188)
1 parent 17a3855 commit a49715f

File tree

1 file changed

+77
-15
lines changed

1 file changed

+77
-15
lines changed

frontend/ongi/lib/screens/health/family_step_tracker_screen.dart

Lines changed: 77 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,10 @@ class _FamilyStepTrackerScreenState extends State<FamilyStepTrackerScreen> {
6464
];
6565

6666
final results = await Future.wait(futures);
67-
final Map<String, dynamic>? stepResult = results[0] as Map<String, dynamic>?;
68-
final List<Map<String, dynamic>> familyMembers = results[1] as List<Map<String, dynamic>>;
67+
final Map<String, dynamic>? stepResult =
68+
results[0] as Map<String, dynamic>?;
69+
final List<Map<String, dynamic>> familyMembers =
70+
results[1] as List<Map<String, dynamic>>;
6971

7072
int parsedTotal = 0;
7173
final List<_MemberStep> parsedMembers = [];
@@ -88,8 +90,12 @@ class _FamilyStepTrackerScreenState extends State<FamilyStepTrackerScreen> {
8890
? item['steps'] as int
8991
: int.tryParse(item['steps']?.toString() ?? '0') ?? 0;
9092

91-
// 실제 가족 구성원의 프로필 이미지 가져오기
92-
final profileImagePath = await PrefsManager.getProfileImagePathByUserId(userId, familyMembers);
93+
// 더 향상된 사용자 매칭 로직
94+
String profileImagePath = await _getProfileImageForUser(
95+
userId,
96+
userName,
97+
familyMembers,
98+
);
9399

94100
parsedMembers.add(
95101
_MemberStep(
@@ -123,6 +129,62 @@ class _FamilyStepTrackerScreenState extends State<FamilyStepTrackerScreen> {
123129
}
124130
}
125131

132+
Future<String> _getProfileImageForUser(
133+
String userId,
134+
String userName,
135+
List<Map<String, dynamic>> familyMembers,
136+
) async {
137+
try {
138+
// 1. userId로 매칭 시도 (uuid 필드와 비교)
139+
final memberByUuid = familyMembers
140+
.where((member) => member['uuid']?.toString() == userId)
141+
.firstOrNull;
142+
143+
if (memberByUuid != null && memberByUuid['profileImageId'] != null) {
144+
return PrefsManager.getProfileImagePath(
145+
memberByUuid['profileImageId'] as int,
146+
);
147+
}
148+
149+
// 2. userId 필드와 직접 비교
150+
final memberByUserId = familyMembers
151+
.where((member) => member['userId']?.toString() == userId)
152+
.firstOrNull;
153+
154+
if (memberByUserId != null && memberByUserId['profileImageId'] != null) {
155+
return PrefsManager.getProfileImagePath(
156+
memberByUserId['profileImageId'] as int,
157+
);
158+
}
159+
160+
// 3. userName으로 매칭 시도
161+
if (userName.isNotEmpty) {
162+
final memberByName = familyMembers
163+
.where((member) => member['name']?.toString() == userName)
164+
.firstOrNull;
165+
166+
if (memberByName != null && memberByName['profileImageId'] != null) {
167+
return PrefsManager.getProfileImagePath(
168+
memberByName['profileImageId'] as int,
169+
);
170+
}
171+
}
172+
173+
final currentUserInfo = await PrefsManager.getUserInfo();
174+
final currentUserUuid = currentUserInfo['uuid'];
175+
final currentUserName = currentUserInfo['name'];
176+
177+
if (userId == currentUserUuid || userName == currentUserName) {
178+
final profileImageId = currentUserInfo['profileImageId'] ?? 0;
179+
return PrefsManager.getProfileImagePath(profileImageId);
180+
}
181+
182+
return PrefsManager.getProfileImagePath(0);
183+
} catch (e) {
184+
return PrefsManager.getProfileImagePath(0);
185+
}
186+
}
187+
126188
@override
127189
Widget build(BuildContext context) {
128190
final screenWidth = MediaQuery.of(context).size.width;
@@ -265,14 +327,14 @@ class _FamilyStepTrackerScreenState extends State<FamilyStepTrackerScreen> {
265327
text: _isLoading
266328
? '0걸음'
267329
: _totalSteps
268-
.toString()
269-
.replaceAllMapped(
270-
RegExp(
271-
r'(\d{1,3})(?=(\d{3})+(?!\d))',
272-
),
273-
(m) => '${m[1]},',
274-
) +
275-
'걸음',
330+
.toString()
331+
.replaceAllMapped(
332+
RegExp(
333+
r'(\d{1,3})(?=(\d{3})+(?!\d))',
334+
),
335+
(m) => '${m[1]},',
336+
) +
337+
'걸음',
276338
style: const TextStyle(
277339
fontFamily: 'Pretendard',
278340
fontWeight: FontWeight.w700,
@@ -348,7 +410,7 @@ class _FamilyStepTrackerScreenState extends State<FamilyStepTrackerScreen> {
348410
steps: _memberSteps[i].steps,
349411
image: _memberSteps[i].imageAsset,
350412
isTop:
351-
i == 0 && _memberSteps[i].steps > 0,
413+
i == 0 && _memberSteps[i].steps > 0,
352414
),
353415
if (_memberSteps.isEmpty)
354416
const Padding(
@@ -449,7 +511,7 @@ Widget _buildStepMember({
449511
Text(
450512
steps.toString().replaceAllMapped(
451513
RegExp(r'(\d{1,3})(?=(\d{3})+(?!\d))'),
452-
(m) => '${m[1]},',
514+
(m) => '${m[1]},',
453515
),
454516
style: const TextStyle(
455517
fontFamily: 'Pretendard',
@@ -479,4 +541,4 @@ Widget _buildStepMember({
479541
],
480542
),
481543
);
482-
}
544+
}

0 commit comments

Comments
 (0)