템플릿마다 메인 대시보드 전체 테마(배경/타일/아이콘 색)가 같이 바뀌게 추가
용어 정리: 템플릿 = 상점에서 사는 색/애니메이션 상품, 테마 = 그 템플릿이 몰고 오는 화면 전체 디자인(배경색/타일색/아이콘색). 1단계로 메인 대시보드부터 적용 - 프로필 카드 그라데이션뿐 아니라 페이지 배경, 타일 카드 배경/테두리, 아이콘 동그라미 배경, 타일 아이콘 강조색, 제목/부제목 텍스트 색까지 장착한 템플릿에 맞춰 통째로 바뀐다. 잠긴/비활성 타일(NFC 미인증 등)은 기존처럼 중립 회색(sage)을 그대로 써서 상태 구분은 유지. 6개 기존 템플릿마다 직접 디자인한 테마(lib/theme/profile_themes.dart)를 새로 만들었고, 최고가 "갤럭시" 템플릿은 다른 5개와 달리 통째로 다크 테마로 디자인해 프리미엄 아이템 느낌을 살렸다. 백엔드 /api/shop/equipped가 템플릿 code를 같이 내려주도록 수정해서 프론트엔드가 code로 디자인해둔 테마를 찾아 쓸 수 있게 했다.
This commit is contained in:
@@ -5,6 +5,7 @@ import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart' show Color;
|
||||
import 'package:http/http.dart' as http;
|
||||
import '../config.dart';
|
||||
import '../theme/profile_themes.dart';
|
||||
|
||||
class ShopTemplate {
|
||||
final int id;
|
||||
@@ -125,9 +126,7 @@ class ProfileShopController extends ChangeNotifier {
|
||||
|
||||
/// 🏠 메인 대시보드 프로필 카드 렌더링 전용 - 상점 화면을 열지 않고도
|
||||
/// 현재 장착 중인 테마 색상만 가볍게 조회한다.
|
||||
static Future<(Color? primary, Color? secondary)> fetchEquippedColors(
|
||||
String studentId,
|
||||
) async {
|
||||
static Future<ProfileTheme?> fetchEquippedTheme(String studentId) async {
|
||||
try {
|
||||
final url = Uri.parse(
|
||||
'$baseUrl/api/shop/equipped?studentId=${Uri.encodeComponent(studentId)}',
|
||||
@@ -136,15 +135,12 @@ class ProfileShopController extends ChangeNotifier {
|
||||
if (response.statusCode == 200) {
|
||||
final data = jsonDecode(response.body);
|
||||
if (data['equipped'] == true) {
|
||||
return (
|
||||
_parseColor(data['primaryColor'] as String),
|
||||
_parseColor(data['secondaryColor'] as String),
|
||||
);
|
||||
return profileThemes[data['code'] as String?];
|
||||
}
|
||||
}
|
||||
} catch (_) {
|
||||
// 실패하면 그냥 기본 모습으로 보여준다.
|
||||
}
|
||||
return (null, null);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user