refactor(app): 앱 설정 및 공유 위젯 업데이트

- app.dart: MaterialApp 설정 개선
- retro_panel: 레트로 패널 위젯 수정
This commit is contained in:
JiWoong Sul
2026-01-19 15:50:49 +09:00
parent 19faa9ea39
commit 94c2ed1ca1
2 changed files with 179 additions and 169 deletions

View File

@@ -14,7 +14,11 @@ class RetroPanel extends StatelessWidget {
this.borderWidth = 3.0,
this.useGoldBorder = false,
this.title,
});
this.titleWidget,
}) : assert(
title == null || titleWidget == null,
'title과 titleWidget 중 하나만 사용 가능',
);
/// 패널 내부 컨텐츠
final Widget child;
@@ -34,6 +38,9 @@ class RetroPanel extends StatelessWidget {
/// 패널 타이틀 (상단에 표시)
final String? title;
/// 커스텀 타이틀 위젯 (title 대신 사용)
final Widget? titleWidget;
@override
Widget build(BuildContext context) {
final painter = useGoldBorder
@@ -46,16 +53,24 @@ class RetroPanel extends StatelessWidget {
fillColor: backgroundColor,
);
final hasTitle = title != null || titleWidget != null;
return CustomPaint(
painter: painter,
child: Padding(
padding: EdgeInsets.all(borderWidth).add(padding),
child: title != null
child: hasTitle
? Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
mainAxisSize: MainAxisSize.min,
children: [
_PanelTitle(title: title!, useGoldBorder: useGoldBorder),
if (titleWidget != null)
_PanelTitleContainer(
useGoldBorder: useGoldBorder,
child: titleWidget!,
)
else
_PanelTitle(title: title!, useGoldBorder: useGoldBorder),
const SizedBox(height: 8),
Flexible(child: child),
],
@@ -73,6 +88,33 @@ class _PanelTitle extends StatelessWidget {
final String title;
final bool useGoldBorder;
@override
Widget build(BuildContext context) {
return _PanelTitleContainer(
useGoldBorder: useGoldBorder,
child: Text(
title.toUpperCase(),
style: TextStyle(
fontFamily: 'PressStart2P',
fontSize: 14,
color: useGoldBorder ? RetroColors.gold : RetroColors.textLight,
letterSpacing: 1,
),
),
);
}
}
/// 패널 타이틀 컨테이너 (커스텀 위젯용)
class _PanelTitleContainer extends StatelessWidget {
const _PanelTitleContainer({
required this.useGoldBorder,
required this.child,
});
final bool useGoldBorder;
final Widget child;
@override
Widget build(BuildContext context) {
return Container(
@@ -90,15 +132,7 @@ class _PanelTitle extends StatelessWidget {
),
),
),
child: Text(
title.toUpperCase(),
style: TextStyle(
fontFamily: 'PressStart2P',
fontSize: 14,
color: useGoldBorder ? RetroColors.gold : RetroColors.textLight,
letterSpacing: 1,
),
),
child: child,
);
}
}
@@ -110,11 +144,16 @@ class RetroGoldPanel extends StatelessWidget {
required this.child,
this.padding = const EdgeInsets.all(12),
this.title,
});
this.titleWidget,
}) : assert(
title == null || titleWidget == null,
'title과 titleWidget 중 하나만 사용 가능',
);
final Widget child;
final EdgeInsets padding;
final String? title;
final Widget? titleWidget;
@override
Widget build(BuildContext context) {
@@ -122,6 +161,7 @@ class RetroGoldPanel extends StatelessWidget {
useGoldBorder: true,
padding: padding,
title: title,
titleWidget: titleWidget,
child: child,
);
}