diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..26d3352
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/.idea/caches/deviceStreaming.xml b/.idea/caches/deviceStreaming.xml
new file mode 100644
index 0000000..33049c4
--- /dev/null
+++ b/.idea/caches/deviceStreaming.xml
@@ -0,0 +1,1313 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/deviceManager.xml b/.idea/deviceManager.xml
new file mode 100644
index 0000000..91f9558
--- /dev/null
+++ b/.idea/deviceManager.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..6e86672
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..f281cde
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/rup.iml b/.idea/rup.iml
new file mode 100644
index 0000000..088e44c
--- /dev/null
+++ b/.idea/rup.iml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/android/app/build.gradle.kts b/app/android/app/build.gradle.kts
index e272c33..cb28db6 100644
--- a/app/android/app/build.gradle.kts
+++ b/app/android/app/build.gradle.kts
@@ -3,6 +3,7 @@ plugins {
id("kotlin-android")
// The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins.
id("dev.flutter.flutter-gradle-plugin")
+ id("com.google.gms.google-services")
}
android {
@@ -21,7 +22,7 @@ android {
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
- applicationId = "com.example.app"
+ applicationId = "com.example.rup"
// You can update the following values to match your application needs.
// For more information, see: https://flutter.dev/to/review-gradle-config.
minSdk = flutter.minSdkVersion
diff --git a/app/android/app/google-services.json b/app/android/app/google-services.json
new file mode 100644
index 0000000..5e58445
--- /dev/null
+++ b/app/android/app/google-services.json
@@ -0,0 +1,47 @@
+{
+ "project_info": {
+ "project_number": "379988243470",
+ "project_id": "rup-project-9d4c4",
+ "storage_bucket": "rup-project-9d4c4.firebasestorage.app"
+ },
+ "client": [
+ {
+ "client_info": {
+ "mobilesdk_app_id": "1:379988243470:android:b4a4761b906eb44a1cb85f",
+ "android_client_info": {
+ "package_name": "com.example.rup"
+ }
+ },
+ "oauth_client": [
+ {
+ "client_id": "379988243470-jd0c59ci9ksr36er7sjkrkc4rtgmll1a.apps.googleusercontent.com",
+ "client_type": 1,
+ "android_info": {
+ "package_name": "com.example.rup",
+ "certificate_hash": "7bda16a71840f93ab7c41fecc24da2bde3702424"
+ }
+ },
+ {
+ "client_id": "379988243470-g6490l8gucc3ljras93i28c3l4qlroi4.apps.googleusercontent.com",
+ "client_type": 3
+ }
+ ],
+ "api_key": [
+ {
+ "current_key": "AIzaSyAql00w1JB6n5wb4StXi9eyixVyIuT3-Hg"
+ }
+ ],
+ "services": {
+ "appinvite_service": {
+ "other_platform_oauth_client": [
+ {
+ "client_id": "379988243470-g6490l8gucc3ljras93i28c3l4qlroi4.apps.googleusercontent.com",
+ "client_type": 3
+ }
+ ]
+ }
+ }
+ }
+ ],
+ "configuration_version": "1"
+}
\ No newline at end of file
diff --git a/app/android/app/src/main/AndroidManifest.xml b/app/android/app/src/main/AndroidManifest.xml
index 6ee3df0..11bee04 100644
--- a/app/android/app/src/main/AndroidManifest.xml
+++ b/app/android/app/src/main/AndroidManifest.xml
@@ -1,4 +1,5 @@
+
createState() => _LoginScreenState();
+}
+
+class _LoginScreenState extends State {
+ bool _isLoading = false;
+
+ Future _handleGoogleLogin() async {
+ setState(() {
+ _isLoading = true;
+ });
+
+ try {
+ final authService = AuthService();
+ final user = await authService.signInWithGoogle();
+
+ if (!mounted) return;
+
+ if (user != null) {
+ Navigator.pushReplacement(
+ context,
+ MaterialPageRoute(builder: (context) => const HomeScreen()),
+ );
+ } else {
+ ScaffoldMessenger.of(
+ context,
+ ).showSnackBar(const SnackBar(content: Text('로그인이 취소되었습니다.')));
+ }
+ } catch (e) {
+ if (!mounted) return;
+ ScaffoldMessenger.of(
+ context,
+ ).showSnackBar(SnackBar(content: Text('로그인 실패: $e')));
+ } finally {
+ if (mounted) {
+ setState(() {
+ _isLoading = false;
+ });
+ }
+ }
+ }
+
@override
Widget build(BuildContext context) {
- return Scaffold(
- backgroundColor: Colors.white,
- appBar: AppBar(
- backgroundColor: Colors.white,
- elevation: 0,
- leading: IconButton(
- icon: const Icon(Icons.arrow_back_ios, color: Colors.black, size: 20),
- onPressed: () => Navigator.pop(context),
- ),
- title: const Text(
- '로그인',
- style: TextStyle(
- fontSize: 15,
- fontFamily: 'SCDream',
- fontWeight: FontWeight.w500,
- color: Colors.black,
- ),
- ),
- centerTitle: true,
- ),
- body: Padding(
- padding: const EdgeInsets.fromLTRB(20, 0, 20, 240),
- child: Column(
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- SizedBox(height: 20),
- Row(
- mainAxisAlignment: MainAxisAlignment.start,
- children: [
- Image.asset('assets/img/foot.png', width: 30),
- SizedBox(width: 10),
- Text(
- '로그인',
- style: TextStyle(
- fontSize: 24,
- fontFamily: 'SCDream',
- fontWeight: FontWeight.bold,
- color: Colors.black,
- ),
- ),
- ],
+ return Stack(
+ children: [
+ Scaffold(
+ backgroundColor: Colors.white,
+ appBar: AppBar(
+ backgroundColor: Colors.white,
+ elevation: 0,
+ leading: IconButton(
+ icon: const Icon(
+ Icons.arrow_back_ios,
+ color: Colors.black,
+ size: 20,
+ ),
+ onPressed: () => Navigator.pop(context),
),
- SizedBox(height: 10),
- Text(
- 'RUP에 어서오세요!\n지금 로그인하고 다양한 서비스를 이용해보세요.',
+ title: const Text(
+ '로그인',
style: TextStyle(
- fontSize: 14,
+ fontSize: 15,
fontFamily: 'SCDream',
fontWeight: FontWeight.w500,
color: Colors.black,
),
- textAlign: TextAlign.start,
),
- Spacer(),
- Align(
- alignment: Alignment.centerRight,
- child: Image.asset('assets/img/cat.png', height: 150),
+ centerTitle: true,
+ ),
+ body: Padding(
+ padding: const EdgeInsets.fromLTRB(20, 0, 20, 240),
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ SizedBox(height: 20),
+ Row(
+ mainAxisAlignment: MainAxisAlignment.start,
+ children: [
+ Image.asset('assets/img/foot.png', width: 30),
+ SizedBox(width: 10),
+ Text(
+ '로그인',
+ style: TextStyle(
+ fontSize: 24,
+ fontFamily: 'SCDream',
+ fontWeight: FontWeight.bold,
+ color: Colors.black,
+ ),
+ ),
+ ],
+ ),
+ SizedBox(height: 10),
+ Text(
+ 'RUP에 어서오세요!\n지금 로그인하고 다양한 서비스를 이용해보세요.',
+ style: TextStyle(
+ fontSize: 14,
+ fontFamily: 'SCDream',
+ fontWeight: FontWeight.w500,
+ color: Colors.black,
+ ),
+ textAlign: TextAlign.start,
+ ),
+ Spacer(),
+ Align(
+ alignment: Alignment.centerRight,
+ child: Image.asset('assets/img/cat.png', height: 150),
+ ),
+ SizedBox(height: 10),
+ ],
),
- SizedBox(height: 10),
- ],
+ ),
+ bottomSheet: Container(
+ color: Colors.white,
+ padding: const EdgeInsets.fromLTRB(20, 20, 20, 40),
+ child: Column(
+ mainAxisSize: MainAxisSize.min,
+ crossAxisAlignment: CrossAxisAlignment.stretch,
+ children: [
+ // Naver Login Button
+ _SocialLoginButton(
+ text: '네이버 로그인',
+ textColor: Colors.white,
+ fontFamily: 'SCDream',
+ fontWeight: FontWeight.bold,
+ fontSize: 15,
+ backgroundColor: const Color(0xFF00D03F),
+ onPressed: () {},
+ iconPath: 'assets/icons/navericon.svg',
+ ),
+ const SizedBox(height: 15),
+ // Kakao Login Button
+ _SocialLoginButton(
+ text: '카카오 로그인',
+ textColor: const Color(0xFF212121),
+ fontFamily: 'SCDream',
+ fontWeight: FontWeight.bold,
+ fontSize: 15,
+ backgroundColor: const Color(0xFFFAE100),
+ onPressed: () {},
+ iconPath: 'assets/icons/kakaoicon.svg',
+ ),
+ const SizedBox(height: 15),
+ // Google Login Button
+ _SocialLoginButton(
+ text: '구글 로그인',
+ textColor: const Color(0xFF17191A),
+ fontFamily: 'SCDream',
+ fontWeight: FontWeight.bold,
+ fontSize: 15,
+ backgroundColor: Colors.white,
+ onPressed: _handleGoogleLogin,
+ iconPath: 'assets/icons/googleicon.svg',
+ isBordered: true,
+ ),
+ ],
+ ),
+ ),
),
- ),
- bottomSheet: Container(
- color: Colors.white,
- padding: const EdgeInsets.fromLTRB(20, 20, 20, 40),
- child: Column(
- mainAxisSize: MainAxisSize.min,
- crossAxisAlignment: CrossAxisAlignment.stretch,
- children: [
- // Naver Login Button
- _SocialLoginButton(
- text: '네이버 로그인',
- textColor: Colors.white,
- fontFamily: 'SCDream',
- fontWeight: FontWeight.bold,
- fontSize: 15,
- backgroundColor: const Color(0xFF00D03F),
- onPressed: () {},
- iconPath: 'assets/icons/navericon.svg',
- ),
- const SizedBox(height: 15),
- // Kakao Login Button
- _SocialLoginButton(
- text: '카카오 로그인',
- textColor: const Color(0xFF212121),
- fontFamily: 'SCDream',
- fontWeight: FontWeight.bold,
- fontSize: 15,
- backgroundColor: const Color(0xFFFAE100),
- onPressed: () {},
- iconPath: 'assets/icons/kakaoicon.svg',
- ),
- const SizedBox(height: 15),
- // Google Login Button
- _SocialLoginButton(
- text: '구글 로그인',
- textColor: const Color(0xFF17191A),
- fontFamily: 'SCDream',
- fontWeight: FontWeight.bold,
- fontSize: 15,
- backgroundColor: Colors.white,
- onPressed: () {},
- iconPath: 'assets/icons/googleicon.svg',
- isBordered: true,
- ),
- ],
- ),
- ),
+ if (_isLoading)
+ Container(
+ color: Colors.black.withOpacity(0.5),
+ child: const Center(child: CircularProgressIndicator()),
+ ),
+ ],
);
}
}
diff --git a/app/lib/screens/signup_screen.dart b/app/lib/screens/signup_screen.dart
index fa48f24..8f8baf8 100644
--- a/app/lib/screens/signup_screen.dart
+++ b/app/lib/screens/signup_screen.dart
@@ -1,119 +1,176 @@
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
+import '../services/auth_service.dart';
+import 'home_screen.dart';
-class SignupScreen extends StatelessWidget {
+class SignupScreen extends StatefulWidget {
const SignupScreen({super.key});
+ @override
+ State createState() => _SignupScreenState();
+}
+
+class _SignupScreenState extends State {
+ bool _isLoading = false;
+
+ Future _handleGoogleLogin() async {
+ setState(() {
+ _isLoading = true;
+ });
+
+ try {
+ final authService = AuthService();
+ final user = await authService.signInWithGoogle();
+
+ if (!mounted) return;
+
+ if (user != null) {
+ Navigator.pushReplacement(
+ context,
+ MaterialPageRoute(builder: (context) => const HomeScreen()),
+ );
+ } else {
+ ScaffoldMessenger.of(
+ context,
+ ).showSnackBar(const SnackBar(content: Text('로그인이 취소되었습니다.')));
+ }
+ } catch (e) {
+ if (!mounted) return;
+ ScaffoldMessenger.of(
+ context,
+ ).showSnackBar(SnackBar(content: Text('로그인 실패: $e')));
+ } finally {
+ if (mounted) {
+ setState(() {
+ _isLoading = false;
+ });
+ }
+ }
+ }
+
@override
Widget build(BuildContext context) {
- return Scaffold(
- backgroundColor: Colors.white,
- appBar: AppBar(
- backgroundColor: Colors.white,
- elevation: 0,
- leading: IconButton(
- icon: Icon(Icons.arrow_back_ios, color: Colors.black, size: 20),
- onPressed: () => Navigator.pop(context),
- ),
- title: Text(
- '회원가입',
- style: TextStyle(
- fontSize: 15,
- fontFamily: 'SCDream',
- fontWeight: FontWeight.w500,
- color: Colors.black,
- ),
- ),
- centerTitle: true,
- ),
- body: Padding(
- padding: const EdgeInsets.fromLTRB(20, 0, 20, 240),
- child: Column(
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- SizedBox(height: 20),
- Row(
- mainAxisAlignment: MainAxisAlignment.start,
- children: [
- Image.asset('assets/img/foot.png', width: 30),
- SizedBox(width: 10),
- Text(
- '서비스 이용 약관',
- style: TextStyle(
- fontSize: 24,
- fontFamily: 'SCDream',
- fontWeight: FontWeight.bold,
- color: Colors.black,
- ),
- ),
- ],
+ return Stack(
+ children: [
+ Scaffold(
+ backgroundColor: Colors.white,
+ appBar: AppBar(
+ backgroundColor: Colors.white,
+ elevation: 0,
+ leading: IconButton(
+ icon: const Icon(
+ Icons.arrow_back_ios,
+ color: Colors.black,
+ size: 20,
+ ),
+ onPressed: () => Navigator.pop(context),
),
- SizedBox(height: 10),
- Text(
- '똑똑한 반려생활을 위한 첫걸음,\nRUP에 오신것을 환영해요!',
+ title: const Text(
+ '회원가입',
style: TextStyle(
- fontSize: 14,
+ fontSize: 15,
fontFamily: 'SCDream',
fontWeight: FontWeight.w500,
color: Colors.black,
),
- textAlign: TextAlign.start,
),
- Spacer(),
- Align(
- alignment: Alignment.centerRight,
- child: Image.asset('assets/img/cat.png', height: 150),
+ centerTitle: true,
+ ),
+ body: Padding(
+ padding: const EdgeInsets.fromLTRB(20, 0, 20, 240),
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ const SizedBox(height: 20),
+ Row(
+ mainAxisAlignment: MainAxisAlignment.start,
+ children: [
+ Image.asset('assets/img/foot.png', width: 30),
+ const SizedBox(width: 10),
+ const Text(
+ '서비스 이용 약관',
+ style: TextStyle(
+ fontSize: 24,
+ fontFamily: 'SCDream',
+ fontWeight: FontWeight.bold,
+ color: Colors.black,
+ ),
+ ),
+ ],
+ ),
+ const SizedBox(height: 10),
+ const Text(
+ '똑똑한 반려생활을 위한 첫걸음,\nRUP에 오신것을 환영해요!',
+ style: TextStyle(
+ fontSize: 14,
+ fontFamily: 'SCDream',
+ fontWeight: FontWeight.w500,
+ color: Colors.black,
+ ),
+ textAlign: TextAlign.start,
+ ),
+ const Spacer(),
+ Align(
+ alignment: Alignment.centerRight,
+ child: Image.asset('assets/img/cat.png', height: 150),
+ ),
+ const SizedBox(height: 10),
+ ],
),
- SizedBox(height: 10),
- ],
+ ),
+ bottomSheet: Container(
+ color: Colors.white,
+ padding: const EdgeInsets.fromLTRB(20, 20, 20, 40),
+ child: Column(
+ mainAxisSize: MainAxisSize.min,
+ crossAxisAlignment: CrossAxisAlignment.stretch,
+ children: [
+ // Naver Login Button
+ _SocialLoginButton(
+ text: '네이버 로그인',
+ textColor: Colors.white,
+ fontFamily: 'SCDream',
+ fontWeight: FontWeight.bold,
+ fontSize: 15,
+ backgroundColor: const Color(0xFF00D03F),
+ onPressed: () {},
+ iconPath: 'assets/icons/navericon.svg',
+ ),
+ const SizedBox(height: 15),
+ // Kakao Login Button
+ _SocialLoginButton(
+ text: '카카오로 3초만에 시작하기',
+ textColor: const Color(0xFF212121),
+ fontFamily: 'SCDream',
+ fontWeight: FontWeight.bold,
+ fontSize: 15,
+ backgroundColor: const Color(0xFFFAE100),
+ onPressed: () {},
+ iconPath: 'assets/icons/kakaoicon.svg',
+ ),
+ const SizedBox(height: 15),
+ // Google Login Button
+ _SocialLoginButton(
+ text: '구글 로그인',
+ textColor: const Color(0xFF17191A),
+ fontFamily: 'SCDream',
+ fontWeight: FontWeight.bold,
+ fontSize: 15,
+ backgroundColor: Colors.white,
+ onPressed: _handleGoogleLogin,
+ iconPath: 'assets/icons/googleicon.svg',
+ isBordered: true,
+ ),
+ ],
+ ),
+ ),
),
- ),
- bottomSheet: Container(
- color: Colors.white,
- padding: EdgeInsets.fromLTRB(20, 20, 20, 40),
- child: Column(
- mainAxisSize: MainAxisSize.min,
- crossAxisAlignment: CrossAxisAlignment.stretch,
- children: [
- // Naver Login Button
- _SocialLoginButton(
- text: '네이버 로그인',
- textColor: Colors.white,
- fontFamily: 'SCDream',
- fontWeight: FontWeight.bold,
- fontSize: 15,
- backgroundColor: Color(0xFF00D03F),
- onPressed: () {},
- iconPath: 'assets/icons/navericon.svg',
- ),
- SizedBox(height: 15),
- // Kakao Login Button
- _SocialLoginButton(
- text: '카카오로 3초만에 시작하기',
- textColor: Color(0xFF212121),
- fontFamily: 'SCDream',
- fontWeight: FontWeight.bold,
- fontSize: 15,
- backgroundColor: Color(0xFFFAE100),
- onPressed: () {},
- iconPath: 'assets/icons/kakaoicon.svg',
- ),
- SizedBox(height: 15),
- // Google Login Button
- _SocialLoginButton(
- text: '구글 로그인',
- textColor: Color(0xFF17191A),
- fontFamily: 'SCDream',
- fontWeight: FontWeight.bold,
- fontSize: 15,
- backgroundColor: Colors.white,
- onPressed: () {},
- iconPath: 'assets/icons/googleicon.svg',
- isBordered: true,
- ),
- ],
- ),
- ),
+ if (_isLoading)
+ Container(
+ color: Colors.black.withOpacity(0.5),
+ child: const Center(child: CircularProgressIndicator()),
+ ),
+ ],
);
}
}
diff --git a/app/lib/screens/splash_screen.dart b/app/lib/screens/splash_screen.dart
index bce0c37..b4d0af4 100644
--- a/app/lib/screens/splash_screen.dart
+++ b/app/lib/screens/splash_screen.dart
@@ -43,7 +43,7 @@ class _SplashScreenState extends State {
@override
Widget build(BuildContext context) {
return Scaffold(
- backgroundColor: const Color(0xFFFF7500), // Original Brand Color
+ backgroundColor: const Color(0xFFFF7500),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
diff --git a/app/lib/services/auth_service.dart b/app/lib/services/auth_service.dart
new file mode 100644
index 0000000..d98aaff
--- /dev/null
+++ b/app/lib/services/auth_service.dart
@@ -0,0 +1,51 @@
+import 'package:firebase_auth/firebase_auth.dart';
+import 'package:google_sign_in/google_sign_in.dart';
+
+class AuthService {
+ final FirebaseAuth _auth = FirebaseAuth.instance;
+ final GoogleSignIn _googleSignIn = GoogleSignIn();
+
+ // 구글 로그인
+ Future signInWithGoogle() async {
+ // 1. 구글 로그인 흐름 시작
+ print('[DEBUG] Google Sign-In: Starting signIn()');
+ final GoogleSignInAccount? googleUser = await _googleSignIn.signIn();
+ print(
+ '[DEBUG] Google Sign-In: signIn() completed, user: ${googleUser?.email}',
+ );
+
+ if (googleUser == null) {
+ // 사용자가 로그인 창을 닫음
+ print('[DEBUG] Google Sign-In: User canceled');
+ return null;
+ }
+
+ // 2. 인증 세부 정보 요청
+ print('[DEBUG] Google Sign-In: Getting authentication...');
+ final GoogleSignInAuthentication googleAuth =
+ await googleUser.authentication;
+ print(
+ '[DEBUG] Google Sign-In: Authentication received. AccessToken: ${googleAuth.accessToken != null}, IDToken: ${googleAuth.idToken != null}',
+ );
+
+ // 3. 자격 증명 생성
+ final OAuthCredential credential = GoogleAuthProvider.credential(
+ accessToken: googleAuth.accessToken,
+ idToken: googleAuth.idToken,
+ );
+
+ // 4. Firebase에 로그인
+ print('[DEBUG] Google Sign-In: Signing in with credential to Firebase...');
+ final userCredential = await _auth.signInWithCredential(credential);
+ print(
+ '[DEBUG] Google Sign-In: Firebase sign-in completed. User: ${userCredential.user?.uid}',
+ );
+ return userCredential;
+ }
+
+ // 로그아웃
+ Future signOut() async {
+ await _googleSignIn.signOut();
+ await _auth.signOut();
+ }
+}
diff --git a/app/macos/Flutter/GeneratedPluginRegistrant.swift b/app/macos/Flutter/GeneratedPluginRegistrant.swift
index e292918..3e80842 100644
--- a/app/macos/Flutter/GeneratedPluginRegistrant.swift
+++ b/app/macos/Flutter/GeneratedPluginRegistrant.swift
@@ -5,8 +5,14 @@
import FlutterMacOS
import Foundation
+import firebase_auth
+import firebase_core
+import google_sign_in_ios
import video_player_avfoundation
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
+ FLTFirebaseAuthPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseAuthPlugin"))
+ FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin"))
+ FLTGoogleSignInPlugin.register(with: registry.registrar(forPlugin: "FLTGoogleSignInPlugin"))
FVPVideoPlayerPlugin.register(with: registry.registrar(forPlugin: "FVPVideoPlayerPlugin"))
}
diff --git a/app/pubspec.lock b/app/pubspec.lock
index f3bb326..3ad0580 100644
--- a/app/pubspec.lock
+++ b/app/pubspec.lock
@@ -1,6 +1,14 @@
# Generated by pub
# See https://dart.dev/tools/pub/glossary#lockfile
packages:
+ _flutterfire_internals:
+ dependency: transitive
+ description:
+ name: _flutterfire_internals
+ sha256: ff0a84a2734d9e1089f8aedd5c0af0061b82fb94e95260d943404e0ef2134b11
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.3.59"
args:
dependency: transitive
description:
@@ -73,6 +81,54 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.3.3"
+ firebase_auth:
+ dependency: "direct main"
+ description:
+ name: firebase_auth
+ sha256: "0fed2133bee1369ee1118c1fef27b2ce0d84c54b7819a2b17dada5cfec3b03ff"
+ url: "https://pub.dev"
+ source: hosted
+ version: "5.7.0"
+ firebase_auth_platform_interface:
+ dependency: transitive
+ description:
+ name: firebase_auth_platform_interface
+ sha256: "871c9df4ec9a754d1a793f7eb42fa3b94249d464cfb19152ba93e14a5966b386"
+ url: "https://pub.dev"
+ source: hosted
+ version: "7.7.3"
+ firebase_auth_web:
+ dependency: transitive
+ description:
+ name: firebase_auth_web
+ sha256: d9ada769c43261fd1b18decf113186e915c921a811bd5014f5ea08f4cf4bc57e
+ url: "https://pub.dev"
+ source: hosted
+ version: "5.15.3"
+ firebase_core:
+ dependency: "direct main"
+ description:
+ name: firebase_core
+ sha256: "7be63a3f841fc9663342f7f3a011a42aef6a61066943c90b1c434d79d5c995c5"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.15.2"
+ firebase_core_platform_interface:
+ dependency: transitive
+ description:
+ name: firebase_core_platform_interface
+ sha256: cccb4f572325dc14904c02fcc7db6323ad62ba02536833dddb5c02cac7341c64
+ url: "https://pub.dev"
+ source: hosted
+ version: "6.0.2"
+ firebase_core_web:
+ dependency: transitive
+ description:
+ name: firebase_core_web
+ sha256: "0ed0dc292e8f9ac50992e2394e9d336a0275b6ae400d64163fdf0a8a8b556c37"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.24.1"
flutter:
dependency: "direct main"
description: flutter
@@ -104,6 +160,54 @@ packages:
description: flutter
source: sdk
version: "0.0.0"
+ google_identity_services_web:
+ dependency: transitive
+ description:
+ name: google_identity_services_web
+ sha256: "5d187c46dc59e02646e10fe82665fc3884a9b71bc1c90c2b8b749316d33ee454"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.3.3+1"
+ google_sign_in:
+ dependency: "direct main"
+ description:
+ name: google_sign_in
+ sha256: d0a2c3bcb06e607bb11e4daca48bd4b6120f0bbc4015ccebbe757d24ea60ed2a
+ url: "https://pub.dev"
+ source: hosted
+ version: "6.3.0"
+ google_sign_in_android:
+ dependency: transitive
+ description:
+ name: google_sign_in_android
+ sha256: d5e23c56a4b84b6427552f1cf3f98f716db3b1d1a647f16b96dbb5b93afa2805
+ url: "https://pub.dev"
+ source: hosted
+ version: "6.2.1"
+ google_sign_in_ios:
+ dependency: transitive
+ description:
+ name: google_sign_in_ios
+ sha256: "102005f498ce18442e7158f6791033bbc15ad2dcc0afa4cf4752e2722a516c96"
+ url: "https://pub.dev"
+ source: hosted
+ version: "5.9.0"
+ google_sign_in_platform_interface:
+ dependency: transitive
+ description:
+ name: google_sign_in_platform_interface
+ sha256: "5f6f79cf139c197261adb6ac024577518ae48fdff8e53205c5373b5f6430a8aa"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.5.0"
+ google_sign_in_web:
+ dependency: transitive
+ description:
+ name: google_sign_in_web
+ sha256: "460547beb4962b7623ac0fb8122d6b8268c951cf0b646dd150d60498430e4ded"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.12.4+4"
html:
dependency: transitive
description:
diff --git a/app/pubspec.yaml b/app/pubspec.yaml
index 0da71af..42b3efe 100644
--- a/app/pubspec.yaml
+++ b/app/pubspec.yaml
@@ -36,6 +36,9 @@ dependencies:
cupertino_icons: ^1.0.8
flutter_svg: ^2.0.10
video_player: ^2.8.2
+ firebase_core: ^3.0.0 # 파이어베이스 기본 (Updated)
+ firebase_auth: ^5.0.0 # 인증 기능 (Updated)
+ google_sign_in: ^6.2.1 # 구글 로그인 UI/기능 (Updated)
dev_dependencies:
flutter_test:
diff --git a/app/windows/flutter/generated_plugin_registrant.cc b/app/windows/flutter/generated_plugin_registrant.cc
index 8b6d468..d141b74 100644
--- a/app/windows/flutter/generated_plugin_registrant.cc
+++ b/app/windows/flutter/generated_plugin_registrant.cc
@@ -6,6 +6,12 @@
#include "generated_plugin_registrant.h"
+#include
+#include
void RegisterPlugins(flutter::PluginRegistry* registry) {
+ FirebaseAuthPluginCApiRegisterWithRegistrar(
+ registry->GetRegistrarForPlugin("FirebaseAuthPluginCApi"));
+ FirebaseCorePluginCApiRegisterWithRegistrar(
+ registry->GetRegistrarForPlugin("FirebaseCorePluginCApi"));
}
diff --git a/app/windows/flutter/generated_plugins.cmake b/app/windows/flutter/generated_plugins.cmake
index b93c4c3..29944d5 100644
--- a/app/windows/flutter/generated_plugins.cmake
+++ b/app/windows/flutter/generated_plugins.cmake
@@ -3,6 +3,8 @@
#
list(APPEND FLUTTER_PLUGIN_LIST
+ firebase_auth
+ firebase_core
)
list(APPEND FLUTTER_FFI_PLUGIN_LIST