refactor(app): 앱 설정 및 공유 위젯 업데이트
- app.dart: MaterialApp 설정 개선 - retro_panel: 레트로 패널 위젯 수정
This commit is contained in:
@@ -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,
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user