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