Flutter 앱 골격 · 5탭 네비게이션 · 로그인 화면 · Firestore 보안 규칙·인덱스
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
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,
|
||||
required this.specPath,
|
||||
});
|
||||
|
||||
/// 계약 고정 탭 라벨(견적서 v2.1 5탭).
|
||||
final String tab;
|
||||
final String screenId;
|
||||
final String screenName;
|
||||
final String specPath;
|
||||
|
||||
@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(specPath, style: text.bodySmall),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user