커스텀창 체험하기 미리보기가 제목 알약/준비중 타일까지 전부 반영되게 수정
TitlePill이 전역(globalProfileTheme, 실제 장착된 테마)만 구독하고 있어서, 커스텀창 안에서 체험하기로 다른 템플릿을 미리보는 중에도 제목 알약은 실제 장착된 테마 색 그대로 남아있었다. TitlePill에 previewTheme 파라미터를 추가해 넘기면 전역 테마보다 우선하도록 하고, 커스텀창에서 자신의 _displayTheme(체험 중인 테마)를 넘기게 했다. "랭킹·친구창 배경"/"출석·그룹창 표시" 준비중 타일도 같은 이유로 실제 장착된 테마(AppPalette.linen/sage, 전역)를 쓰고 있어서 체험하기를 눌러도 안 바뀌던 것을, _CategoryTile에 theme 파라미터를 추가해 _displayTheme을 쓰도록 고쳤다.
This commit is contained in:
@@ -136,7 +136,7 @@ class _ProfileCustomizeScreenState extends State<ProfileCustomizeScreen> {
|
||||
foregroundColor: AppPalette.ink,
|
||||
elevation: 0,
|
||||
centerTitle: true,
|
||||
title: const TitlePill('프로필 꾸미기'),
|
||||
title: TitlePill('프로필 꾸미기', previewTheme: _displayTheme),
|
||||
),
|
||||
body: ListenableBuilder(
|
||||
listenable: _controller,
|
||||
@@ -233,6 +233,7 @@ class _ProfileCustomizeScreenState extends State<ProfileCustomizeScreen> {
|
||||
selected: false,
|
||||
enabled: false,
|
||||
onTap: null,
|
||||
theme: _displayTheme,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 12),
|
||||
@@ -244,6 +245,7 @@ class _ProfileCustomizeScreenState extends State<ProfileCustomizeScreen> {
|
||||
selected: false,
|
||||
enabled: false,
|
||||
onTap: null,
|
||||
theme: _displayTheme,
|
||||
),
|
||||
),
|
||||
],
|
||||
@@ -301,6 +303,8 @@ class _CategoryTile extends StatelessWidget {
|
||||
// 👀 미리보기 중인 테마 색상 - selected일 때만 의미가 있다 (기본 프로필 타일 전용).
|
||||
final Color? previewPrimary;
|
||||
final Color? previewSecondary;
|
||||
// 🚧 "준비중" 비활성 타일의 은은한 틴트용 - 커스텀창의 체험하기 미리보기를 따라간다.
|
||||
final ProfileTheme? theme;
|
||||
|
||||
const _CategoryTile({
|
||||
required this.title,
|
||||
@@ -311,6 +315,7 @@ class _CategoryTile extends StatelessWidget {
|
||||
required this.onTap,
|
||||
this.previewPrimary,
|
||||
this.previewSecondary,
|
||||
this.theme,
|
||||
});
|
||||
|
||||
@override
|
||||
@@ -321,7 +326,9 @@ class _CategoryTile extends StatelessWidget {
|
||||
? Colors.transparent
|
||||
: (selected
|
||||
? AppPalette.ink
|
||||
: (enabled ? AppPalette.paper : AppPalette.linen)),
|
||||
: (enabled
|
||||
? AppPalette.paper
|
||||
: (theme?.surfaceAlt ?? AppPalette.linen))),
|
||||
borderRadius: BorderRadius.circular(20),
|
||||
child: InkWell(
|
||||
borderRadius: BorderRadius.circular(20),
|
||||
@@ -340,7 +347,9 @@ class _CategoryTile extends StatelessWidget {
|
||||
border: Border.all(
|
||||
color: hasPreview
|
||||
? previewSecondary!
|
||||
: (selected ? AppPalette.ink : AppPalette.sage),
|
||||
: (selected
|
||||
? AppPalette.ink
|
||||
: (theme?.border ?? AppPalette.sage)),
|
||||
width: hasPreview ? 2 : 1,
|
||||
),
|
||||
),
|
||||
|
||||
@@ -4,18 +4,24 @@
|
||||
// 공유하는 위젯이라 여기 하나만 고치면 모든 화면의 제목 배경이 한번에 바뀐다.
|
||||
import 'package:flutter/material.dart';
|
||||
import '../theme/app_palette.dart';
|
||||
import '../theme/profile_themes.dart';
|
||||
import '../theme/theme_sync.dart';
|
||||
|
||||
class TitlePill extends StatelessWidget {
|
||||
final String text;
|
||||
|
||||
const TitlePill(this.text, {super.key});
|
||||
/// 🎨 프로필 꾸미기 화면의 "체험하기" 미리보기처럼, 이 화면 안에서만 임시로
|
||||
/// 보여줄 테마가 있을 때 넘긴다. 넘기면 전역 장착 테마보다 이게 우선한다.
|
||||
final ProfileTheme? previewTheme;
|
||||
|
||||
const TitlePill(this.text, {super.key, this.previewTheme});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return ValueListenableBuilder(
|
||||
valueListenable: globalProfileTheme,
|
||||
builder: (context, theme, _) {
|
||||
builder: (context, globalTheme, _) {
|
||||
final theme = previewTheme ?? globalTheme;
|
||||
return Padding(
|
||||
padding: const EdgeInsets.only(top: 8),
|
||||
child: Container(
|
||||
|
||||
Reference in New Issue
Block a user