65 lines
2.4 KiB
Dart
65 lines
2.4 KiB
Dart
import 'package:flutter/material.dart';
|
|
|
|
import '../theme/tokens.dart';
|
|
|
|
/// 탭 루트 화면의 플레이스홀더.
|
|
///
|
|
/// 2주차 범위는 「앱 골격 · 5탭 네비게이션 · 소셜 로그인 · 디자인시스템」이다(별첨2).
|
|
/// 각 탭의 실제 화면은 3주차 이후이므로, 여기서는 어느 화면이 들어올 자리인지와
|
|
/// 다음 구현 시점을 보여 준다. 빈 화면을 두면 검수 때 무엇이 빠진 건지 알 수 없다.
|
|
class TabPlaceholder extends StatelessWidget {
|
|
const TabPlaceholder({
|
|
super.key,
|
|
required this.tab,
|
|
required this.screenId,
|
|
required this.screenName,
|
|
});
|
|
|
|
/// 계약 고정 탭 라벨(견적서 v2.1 5탭).
|
|
final String tab;
|
|
final String screenId;
|
|
final String screenName;
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
final text = Theme.of(context).textTheme;
|
|
return Scaffold(
|
|
appBar: AppBar(title: Text(screenName)),
|
|
body: SafeArea(
|
|
child: Padding(
|
|
padding: const EdgeInsets.all(AppSpace.s5),
|
|
child: Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
Text(tab, style: text.labelMedium),
|
|
const SizedBox(height: AppSpace.s2),
|
|
Text(screenName, style: text.displayMedium),
|
|
const SizedBox(height: AppSpace.s4),
|
|
Text(screenId, style: text.titleMedium),
|
|
const SizedBox(height: AppSpace.s5),
|
|
Container(
|
|
padding: const EdgeInsets.all(AppSpace.s4),
|
|
decoration: BoxDecoration(
|
|
color: AppColors.cosmicSurfaceContainer,
|
|
border: Border.all(color: AppColors.cosmicOutline),
|
|
borderRadius: BorderRadius.circular(AppRadius.md),
|
|
),
|
|
child: Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
Text('2주차 범위: 탭 골격까지', style: text.bodyMedium),
|
|
const SizedBox(height: AppSpace.s2),
|
|
Text('화면 구현은 3주차 이후', style: text.bodySmall),
|
|
const SizedBox(height: AppSpace.s3),
|
|
Text('승인된 화면 정의를 기준으로 구현합니다.', style: text.bodySmall),
|
|
],
|
|
),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|