나머지 기능 화면들도 검정 AppBar를 둥근 제목 알약으로 통일
실시간 출석 현황과 같은 톤으로, 설정/교사 회원가입/관리자 시스템/ NFC 태그 쓰기·체크인/학생 통합 관리 센터/스마트기기 반출 신청·대장 화면의 검정 배경 AppBar를 투명 배경 + 가운데 둥근 제목 알약으로 교체. 출석 현황 화면과 달리 폰트 크기는 줄이지 않고 각 화면이 원래 쓰던 스타일(굵기 등)을 그대로 유지 - 공용 TitlePill 위젯이 스타일링된 Text를 그대로 감싸주기만 함. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -5,6 +5,7 @@ import '../function/admin_controller.dart';
|
|||||||
import '../theme/app_palette.dart';
|
import '../theme/app_palette.dart';
|
||||||
import 'app_notice.dart';
|
import 'app_notice.dart';
|
||||||
import 'login_screen.dart';
|
import 'login_screen.dart';
|
||||||
|
import 'title_pill.dart';
|
||||||
|
|
||||||
// ==========================================
|
// ==========================================
|
||||||
// 🛠️ 5. 관리자 대시보드 (DB 초기화 암호 파라미터 보정 완료)
|
// 🛠️ 5. 관리자 대시보드 (DB 초기화 암호 파라미터 보정 완료)
|
||||||
@@ -73,9 +74,13 @@ class _AdminDashboardState extends State<AdminDashboard> {
|
|||||||
return Scaffold(
|
return Scaffold(
|
||||||
backgroundColor: AppPalette.mist,
|
backgroundColor: AppPalette.mist,
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
title: const Text('관리자 시스템'),
|
backgroundColor: Colors.transparent,
|
||||||
backgroundColor: AppPalette.ink,
|
foregroundColor: AppPalette.ink,
|
||||||
foregroundColor: AppPalette.paper,
|
elevation: 0,
|
||||||
|
centerTitle: true,
|
||||||
|
title: const TitlePill(
|
||||||
|
child: Text('관리자 시스템', style: TextStyle(color: Colors.white)),
|
||||||
|
),
|
||||||
actions: [
|
actions: [
|
||||||
IconButton(
|
IconButton(
|
||||||
icon: const Icon(Icons.logout),
|
icon: const Icon(Icons.logout),
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import '../models/dashboard_tile_layout.dart';
|
import '../models/dashboard_tile_layout.dart';
|
||||||
import '../theme/app_palette.dart';
|
import '../theme/app_palette.dart';
|
||||||
|
import 'title_pill.dart';
|
||||||
|
|
||||||
class DashboardSettingsPage extends StatelessWidget {
|
class DashboardSettingsPage extends StatelessWidget {
|
||||||
const DashboardSettingsPage({super.key});
|
const DashboardSettingsPage({super.key});
|
||||||
@@ -12,10 +13,13 @@ class DashboardSettingsPage extends StatelessWidget {
|
|||||||
return Scaffold(
|
return Scaffold(
|
||||||
backgroundColor: AppPalette.mist,
|
backgroundColor: AppPalette.mist,
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
title: const Text('설정'),
|
backgroundColor: Colors.transparent,
|
||||||
backgroundColor: AppPalette.ink,
|
foregroundColor: AppPalette.ink,
|
||||||
foregroundColor: AppPalette.paper,
|
|
||||||
elevation: 0,
|
elevation: 0,
|
||||||
|
centerTitle: true,
|
||||||
|
title: const TitlePill(
|
||||||
|
child: Text('설정', style: TextStyle(color: Colors.white)),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
body: ListView(
|
body: ListView(
|
||||||
padding: const EdgeInsets.all(16),
|
padding: const EdgeInsets.all(16),
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import 'package:flutter/material.dart';
|
|||||||
import '../function/device_checkout_ledger_controller.dart';
|
import '../function/device_checkout_ledger_controller.dart';
|
||||||
import '../theme/app_palette.dart';
|
import '../theme/app_palette.dart';
|
||||||
import 'app_notice.dart';
|
import 'app_notice.dart';
|
||||||
|
import 'title_pill.dart';
|
||||||
|
|
||||||
class DeviceCheckoutLedgerPage extends StatefulWidget {
|
class DeviceCheckoutLedgerPage extends StatefulWidget {
|
||||||
final String? teacherId;
|
final String? teacherId;
|
||||||
@@ -89,13 +90,19 @@ class _DeviceCheckoutLedgerPageState extends State<DeviceCheckoutLedgerPage> {
|
|||||||
return Scaffold(
|
return Scaffold(
|
||||||
backgroundColor: AppPalette.mist,
|
backgroundColor: AppPalette.mist,
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
title: const Text(
|
backgroundColor: Colors.transparent,
|
||||||
'스마트기기 반출 대장',
|
foregroundColor: AppPalette.ink,
|
||||||
style: TextStyle(fontWeight: FontWeight.bold),
|
|
||||||
),
|
|
||||||
backgroundColor: AppPalette.ink,
|
|
||||||
foregroundColor: Colors.white,
|
|
||||||
elevation: 0,
|
elevation: 0,
|
||||||
|
centerTitle: true,
|
||||||
|
title: const TitlePill(
|
||||||
|
child: Text(
|
||||||
|
'스마트기기 반출 대장',
|
||||||
|
style: TextStyle(
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
color: Colors.white,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
actions: [
|
actions: [
|
||||||
IconButton(
|
IconButton(
|
||||||
icon: const Icon(Icons.refresh_rounded),
|
icon: const Icon(Icons.refresh_rounded),
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import 'package:flutter/material.dart';
|
|||||||
import '../function/device_checkout_controller.dart';
|
import '../function/device_checkout_controller.dart';
|
||||||
import '../theme/app_palette.dart';
|
import '../theme/app_palette.dart';
|
||||||
import 'app_notice.dart';
|
import 'app_notice.dart';
|
||||||
|
import 'title_pill.dart';
|
||||||
|
|
||||||
class DeviceCheckoutRequestScreen extends StatefulWidget {
|
class DeviceCheckoutRequestScreen extends StatefulWidget {
|
||||||
final String studentId;
|
final String studentId;
|
||||||
@@ -82,13 +83,19 @@ class _DeviceCheckoutRequestScreenState
|
|||||||
return Scaffold(
|
return Scaffold(
|
||||||
backgroundColor: AppPalette.mist,
|
backgroundColor: AppPalette.mist,
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
title: const Text(
|
backgroundColor: Colors.transparent,
|
||||||
'스마트기기 반출 신청',
|
foregroundColor: AppPalette.ink,
|
||||||
style: TextStyle(fontWeight: FontWeight.bold),
|
|
||||||
),
|
|
||||||
backgroundColor: AppPalette.ink,
|
|
||||||
foregroundColor: Colors.white,
|
|
||||||
elevation: 0,
|
elevation: 0,
|
||||||
|
centerTitle: true,
|
||||||
|
title: const TitlePill(
|
||||||
|
child: Text(
|
||||||
|
'스마트기기 반출 신청',
|
||||||
|
style: TextStyle(
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
color: Colors.white,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
body: SingleChildScrollView(
|
body: SingleChildScrollView(
|
||||||
padding: const EdgeInsets.all(24.0),
|
padding: const EdgeInsets.all(24.0),
|
||||||
|
|||||||
@@ -5,7 +5,9 @@ import 'dart:io' show Platform;
|
|||||||
import 'package:flutter/foundation.dart' show kIsWeb;
|
import 'package:flutter/foundation.dart' show kIsWeb;
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import '../function/nfc_pocket_checkin_controller.dart';
|
import '../function/nfc_pocket_checkin_controller.dart';
|
||||||
|
import '../theme/app_palette.dart';
|
||||||
import 'app_notice.dart';
|
import 'app_notice.dart';
|
||||||
|
import 'title_pill.dart';
|
||||||
|
|
||||||
class NfcPocketCheckInScreen extends StatefulWidget {
|
class NfcPocketCheckInScreen extends StatefulWidget {
|
||||||
final String studentId; // 로그인된 학생 학번 (예: "2061")
|
final String studentId; // 로그인된 학생 학번 (예: "2061")
|
||||||
@@ -158,14 +160,19 @@ class _NfcPocketCheckInScreenState extends State<NfcPocketCheckInScreen> {
|
|||||||
|
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
title: const Text(
|
backgroundColor: Colors.transparent,
|
||||||
"자습실 NFC 출석체크",
|
foregroundColor: AppPalette.ink,
|
||||||
style: TextStyle(
|
elevation: 0,
|
||||||
color: Colors.white,
|
centerTitle: true,
|
||||||
fontWeight: FontWeight.bold,
|
title: const TitlePill(
|
||||||
|
child: Text(
|
||||||
|
"자습실 NFC 출석체크",
|
||||||
|
style: TextStyle(
|
||||||
|
color: Colors.white,
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
backgroundColor: const Color.fromARGB(255, 48, 48, 52),
|
|
||||||
),
|
),
|
||||||
body: Center(
|
body: Center(
|
||||||
child: Padding(
|
child: Padding(
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import 'package:flutter/material.dart';
|
|||||||
import '../function/nfc_tag_writer_controller.dart';
|
import '../function/nfc_tag_writer_controller.dart';
|
||||||
import '../theme/app_palette.dart';
|
import '../theme/app_palette.dart';
|
||||||
import 'app_notice.dart';
|
import 'app_notice.dart';
|
||||||
|
import 'title_pill.dart';
|
||||||
|
|
||||||
class NfcTagWriterScreen extends StatefulWidget {
|
class NfcTagWriterScreen extends StatefulWidget {
|
||||||
const NfcTagWriterScreen({super.key});
|
const NfcTagWriterScreen({super.key});
|
||||||
@@ -53,9 +54,16 @@ class _NfcTagWriterScreenState extends State<NfcTagWriterScreen> {
|
|||||||
return Scaffold(
|
return Scaffold(
|
||||||
backgroundColor: AppPalette.mist,
|
backgroundColor: AppPalette.mist,
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
title: const Text("NFC 주머니 태그 쓰기"),
|
backgroundColor: Colors.transparent,
|
||||||
backgroundColor: AppPalette.ink,
|
foregroundColor: AppPalette.ink,
|
||||||
foregroundColor: AppPalette.paper,
|
elevation: 0,
|
||||||
|
centerTitle: true,
|
||||||
|
title: const TitlePill(
|
||||||
|
child: Text(
|
||||||
|
"NFC 주머니 태그 쓰기",
|
||||||
|
style: TextStyle(color: Colors.white),
|
||||||
|
),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
body: Padding(
|
body: Padding(
|
||||||
padding: const EdgeInsets.all(24.0),
|
padding: const EdgeInsets.all(24.0),
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import 'package:flutter/material.dart';
|
|||||||
import '../function/teacher_register_controller.dart';
|
import '../function/teacher_register_controller.dart';
|
||||||
import '../theme/app_palette.dart';
|
import '../theme/app_palette.dart';
|
||||||
import 'app_notice.dart';
|
import 'app_notice.dart';
|
||||||
|
import 'title_pill.dart';
|
||||||
|
|
||||||
class TeacherRegisterScreen extends StatefulWidget {
|
class TeacherRegisterScreen extends StatefulWidget {
|
||||||
const TeacherRegisterScreen({super.key});
|
const TeacherRegisterScreen({super.key});
|
||||||
@@ -61,9 +62,13 @@ class _TeacherRegisterScreenState extends State<TeacherRegisterScreen> {
|
|||||||
return Scaffold(
|
return Scaffold(
|
||||||
backgroundColor: AppPalette.mist,
|
backgroundColor: AppPalette.mist,
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
title: const Text('교사 회원가입'),
|
backgroundColor: Colors.transparent,
|
||||||
backgroundColor: AppPalette.ink,
|
foregroundColor: AppPalette.ink,
|
||||||
foregroundColor: AppPalette.paper,
|
elevation: 0,
|
||||||
|
centerTitle: true,
|
||||||
|
title: const TitlePill(
|
||||||
|
child: Text('교사 회원가입', style: TextStyle(color: Colors.white)),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
body: SingleChildScrollView(
|
body: SingleChildScrollView(
|
||||||
padding: const EdgeInsets.all(24.0),
|
padding: const EdgeInsets.all(24.0),
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import '../function/excel_file_picker.dart';
|
|||||||
import '../function/teacher_student_management_controller.dart';
|
import '../function/teacher_student_management_controller.dart';
|
||||||
import '../theme/app_palette.dart';
|
import '../theme/app_palette.dart';
|
||||||
import 'app_notice.dart';
|
import 'app_notice.dart';
|
||||||
|
import 'title_pill.dart';
|
||||||
|
|
||||||
// 📐 "실시간 출석 확인" 목록(teacher_attendance_page.dart)의 타일 규격과 동일하게 맞춘다.
|
// 📐 "실시간 출석 확인" 목록(teacher_attendance_page.dart)의 타일 규격과 동일하게 맞춘다.
|
||||||
const double kAttendanceTileWidth = 220;
|
const double kAttendanceTileWidth = 220;
|
||||||
@@ -658,13 +659,19 @@ class _TeacherStudentManagementPageState
|
|||||||
return Scaffold(
|
return Scaffold(
|
||||||
backgroundColor: AppPalette.mist,
|
backgroundColor: AppPalette.mist,
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
title: const Text(
|
backgroundColor: Colors.transparent,
|
||||||
'학생 통합 관리 센터',
|
foregroundColor: AppPalette.ink,
|
||||||
style: TextStyle(fontWeight: FontWeight.bold),
|
|
||||||
),
|
|
||||||
backgroundColor: AppPalette.ink,
|
|
||||||
foregroundColor: AppPalette.paper,
|
|
||||||
elevation: 0,
|
elevation: 0,
|
||||||
|
centerTitle: true,
|
||||||
|
title: const TitlePill(
|
||||||
|
child: Text(
|
||||||
|
'학생 통합 관리 센터',
|
||||||
|
style: TextStyle(
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
color: Colors.white,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
body: SingleChildScrollView(
|
body: SingleChildScrollView(
|
||||||
padding: const EdgeInsets.all(24.0),
|
padding: const EdgeInsets.all(24.0),
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
// 🪶 검정 AppBar 대신 쓰는 둥근 제목 알약. 실시간 출석 현황 화면과 톤을 맞추되,
|
||||||
|
// 크기는 줄이지 않고 각 화면이 원래 쓰던 폰트 스타일을 그대로 넘겨받는다.
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import '../theme/app_palette.dart';
|
||||||
|
|
||||||
|
class TitlePill extends StatelessWidget {
|
||||||
|
final Widget child;
|
||||||
|
|
||||||
|
const TitlePill({super.key, required this.child});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Container(
|
||||||
|
padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 10),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: AppPalette.ink,
|
||||||
|
borderRadius: BorderRadius.circular(999),
|
||||||
|
),
|
||||||
|
child: child,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user