From f9fa05f81729342cb979e58a2f46a955e2c6908e Mon Sep 17 00:00:00 2001 From: sihoo Date: Thu, 6 Aug 2026 14:36:10 +0900 Subject: [PATCH] =?UTF-8?q?=ED=95=99=EA=B5=90=EB=B3=84=20=EB=B0=B0?= =?UTF-8?q?=ED=8F=AC=EB=A5=BC=20=EC=9C=84=ED=95=B4=20=EC=84=9C=EB=B2=84?= =?UTF-8?q?=EC=A3=BC=EC=86=8C/=ED=95=99=EA=B5=90=EC=9D=B4=EB=A6=84?= =?UTF-8?q?=EC=9D=84=20=EB=B9=8C=EB=93=9C=ED=83=80=EC=9E=84=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95=EC=9C=BC=EB=A1=9C=20=EC=A0=84=ED=99=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - config.dart의 baseUrl/webVapidKey와 학교 이름을 String.fromEnvironment로 전환 - 기본값은 기존 백산고 값 그대로라 인자 없이 빌드하면 지금과 동일하게 동작 - 다른 학교는 --dart-define=BASE_URL=...=SCHOOL_NAME=...=WEB_VAPID_KEY=...로 빌드 --- lib/config.dart | 23 +++++++++++++++++++---- lib/main_client_app.dart | 2 +- lib/ui/login_screen.dart | 7 ++++--- 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/lib/config.dart b/lib/config.dart index 864bfc0..80c8de9 100644 --- a/lib/config.dart +++ b/lib/config.dart @@ -5,13 +5,28 @@ import 'package:device_info_plus/device_info_plus.dart'; import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:flutter/foundation.dart' show kIsWeb; -// 🌐 기존에 사용하시던 실제 백엔드 서버 도메인 주소로 통일합니다. -const String baseUrl = 'https://backsanhi.mcv.kr'; +// 🌐 학교마다 다른 값들. 빌드할 때 --dart-define으로 안 넘기면 지금 쓰는 +// 백산고 값이 그대로 기본값이 된다 (기존 빌드 명령이 안 깨지게 하기 위함). +// 예: flutter build web --dart-define=BASE_URL=https://다른학교도메인.com +const String baseUrl = String.fromEnvironment( + 'BASE_URL', + defaultValue: 'https://backsanhi.mcv.kr', +); // 🔑 웹에서 FCM 토큰을 받으려면 필요한 VAPID 키 // (Firebase Console > 프로젝트 설정 > Cloud Messaging > 웹 구성 > 웹 푸시 인증서에서 발급) -const String webVapidKey = - 'BG4LnirukBdW3cXVWxhvY9pcjevBKDhpsaq1SLZdBs2cOEiwLAFyuuZLkMqpEGp9uOuHdPOe_y3FdwdZaz3qdfk'; +// 학교마다 Firebase 프로젝트가 다르므로 VAPID 키도 학교별로 --dart-define=WEB_VAPID_KEY=...로 지정. +const String webVapidKey = String.fromEnvironment( + 'WEB_VAPID_KEY', + defaultValue: + 'BG4LnirukBdW3cXVWxhvY9pcjevBKDhpsaq1SLZdBs2cOEiwLAFyuuZLkMqpEGp9uOuHdPOe_y3FdwdZaz3qdfk', +); + +// 🏫 앱/로그인 화면에 표시할 학교 이름. --dart-define=SCHOOL_NAME=...으로 학교별 지정. +const String schoolName = String.fromEnvironment( + 'SCHOOL_NAME', + defaultValue: '백산고등학교', +); // 권한 요청 및 FCM 토큰을 가져와서 콘솔에 출력하는 함수 Future printFCMToken() async { diff --git a/lib/main_client_app.dart b/lib/main_client_app.dart index 98240bf..d7045a4 100644 --- a/lib/main_client_app.dart +++ b/lib/main_client_app.dart @@ -26,7 +26,7 @@ class SchoolAttendanceApp extends StatelessWidget { Widget build(BuildContext context) { return MaterialApp( debugShowCheckedModeBanner: false, - title: '백산고등학교 학생 도우미', + title: '$schoolName 학생 도우미', theme: ThemeData(primarySwatch: Colors.indigo, useMaterial3: true), home: const LoginScreen(), // 🚪 앱을 켜면 무조건 로그인 화면이 먼저 등장합니다. ); diff --git a/lib/ui/login_screen.dart b/lib/ui/login_screen.dart index ba9901d..6e08425 100644 --- a/lib/ui/login_screen.dart +++ b/lib/ui/login_screen.dart @@ -1,6 +1,7 @@ // 🔑 로그인 화면 (UI 전용). 입력폼/다이얼로그/화면 이동만 담당한다. // 인증 로직/서버 통신은 lib/function/login_controller.dart가 담당한다. import 'package:flutter/material.dart'; +import '../config.dart' show schoolName; import '../function/login_controller.dart'; import 'student_dashboard.dart'; import 'teacher_dashboard.dart'; @@ -310,9 +311,9 @@ class _LoginScreenState extends State { children: [ const Icon(Icons.school, size: 80, color: Colors.indigo), const SizedBox(height: 16), - const Text( - '백산고등학교 모니터', - style: TextStyle( + Text( + '$schoolName 모니터', + style: const TextStyle( fontSize: 26, fontWeight: FontWeight.bold, color: Colors.indigo,