67 lines
2.1 KiB
Dart
67 lines
2.1 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:lucide_icons_flutter/lucide_icons.dart' as lucide;
|
|
import 'package:shadcn_ui/shadcn_ui.dart';
|
|
|
|
/// 기능이 비활성화된 상태에서 안내 메시지를 보여주는 공통 플레이스홀더.
|
|
///
|
|
/// - 기능 플래그나 서버 준비 상태 등으로 화면을 대신할 때 사용한다.
|
|
/// - 사용자가 다음 액션을 쉽게 파악할 수 있도록 제목/설명을 함께 제공한다.
|
|
class FeatureDisabledPlaceholder extends StatelessWidget {
|
|
const FeatureDisabledPlaceholder({
|
|
super.key,
|
|
required this.title,
|
|
required this.description,
|
|
this.icon,
|
|
this.hints = const <Widget>[],
|
|
});
|
|
|
|
final String title;
|
|
final String description;
|
|
final IconData? icon;
|
|
final List<Widget> hints;
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
final theme = ShadTheme.of(context);
|
|
|
|
return Center(
|
|
child: ConstrainedBox(
|
|
constraints: const BoxConstraints(maxWidth: 560),
|
|
child: ShadCard(
|
|
title: Row(
|
|
children: [
|
|
Icon(
|
|
icon ?? lucide.LucideIcons.info,
|
|
size: 18,
|
|
color: theme.colorScheme.mutedForeground,
|
|
),
|
|
const SizedBox(width: 10),
|
|
Text(title, style: theme.textTheme.h3),
|
|
],
|
|
),
|
|
description: Text(description, style: theme.textTheme.muted),
|
|
child: Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
if (hints.isNotEmpty) ...[
|
|
for (final hint in hints)
|
|
Padding(
|
|
padding: const EdgeInsets.only(bottom: 12),
|
|
child: hint,
|
|
),
|
|
] else
|
|
Padding(
|
|
padding: const EdgeInsets.symmetric(vertical: 12),
|
|
child: Text(
|
|
'기능이 활성화되면 이 영역에서 실제 데이터를 확인할 수 있습니다.',
|
|
style: theme.textTheme.small,
|
|
),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|