This commit is contained in:
kleponijo 2026-04-20 21:45:05 +07:00
parent 6bdf5466fd
commit a31c3c001f
5 changed files with 79 additions and 22 deletions

View File

@ -3,6 +3,7 @@ import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart'; import 'package:firebase_auth/firebase_auth.dart';
import 'package:rxdart/rxdart.dart'; import 'package:rxdart/rxdart.dart';
import 'package:user_repository/user_repository.dart'; import 'package:user_repository/user_repository.dart';
import 'package:google_sign_in/google_sign_in.dart';
class FirebaseUserRepo implements UserRepository { class FirebaseUserRepo implements UserRepository {
final FirebaseAuth _firebaseAuth; final FirebaseAuth _firebaseAuth;
@ -93,21 +94,29 @@ class FirebaseUserRepo implements UserRepository {
@override @override
Future<void> signInWithGoogle() async { Future<void> signInWithGoogle() async {
try { try {
final GoogleAuthProvider googleProvider = GoogleAuthProvider(); final account = await GoogleSignIn.instance.authenticate(
final UserCredential userCredential = serverClientId: "1234567890-abcxyz.apps.googleusercontent.com",
await _firebaseAuth.signInWithPopup(googleProvider); );
final User? firebaseUser = userCredential.user; final auth = await account.authentication;
if (firebaseUser != null) {
// Check if user data already exists in Firestore final credential = GoogleAuthProvider.credential(
final existingUser = await userCollection.doc(firebaseUser.uid).get(); idToken: auth.idToken,
);
final userCredential =
await _firebaseAuth.signInWithCredential(credential);
final user = userCredential.user;
if (user != null) {
final existingUser = await userCollection.doc(user.uid).get();
if (!existingUser.exists) { if (!existingUser.exists) {
// Create new user data from Google account info
final newUser = MyUser( final newUser = MyUser(
userId: firebaseUser.uid, userId: user.uid,
email: firebaseUser.email ?? '', email: user.email ?? '',
name: firebaseUser.displayName ?? 'User', name: user.displayName ?? 'User',
hasActiveCart: false, hasActiveCart: false,
); );

View File

@ -152,6 +152,54 @@ packages:
description: flutter description: flutter
source: sdk source: sdk
version: "0.0.0" 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: "521031b65853b4409b8213c0387d57edaad7e2a949ce6dea0d8b2afc9cb29763"
url: "https://pub.dev"
source: hosted
version: "7.2.0"
google_sign_in_android:
dependency: transitive
description:
name: google_sign_in_android
sha256: be0d0733a6a7c5da165879d844a239aa87587a3c767a9163faedde581f731f76
url: "https://pub.dev"
source: hosted
version: "7.2.10"
google_sign_in_ios:
dependency: transitive
description:
name: google_sign_in_ios
sha256: ac1e4c1205267cb7999d1d81333fccffdfda29e853f434bbaf71525498bb6950
url: "https://pub.dev"
source: hosted
version: "6.3.0"
google_sign_in_platform_interface:
dependency: transitive
description:
name: google_sign_in_platform_interface
sha256: "7f59208c42b415a3cca203571128d6f84f885fead2d5b53eb65a9e27f2965bb5"
url: "https://pub.dev"
source: hosted
version: "3.1.0"
google_sign_in_web:
dependency: transitive
description:
name: google_sign_in_web
sha256: d473003eeca892f96a01a64fc803378be765071cb0c265ee872c7f8683245d14
url: "https://pub.dev"
source: hosted
version: "1.1.3"
http: http:
dependency: transitive dependency: transitive
description: description:
@ -334,5 +382,5 @@ packages:
source: hosted source: hosted
version: "1.1.1" version: "1.1.1"
sdks: sdks:
dart: ">=3.8.0-0 <4.0.0" dart: ">=3.10.0 <4.0.0"
flutter: ">=3.22.0" flutter: ">=3.38.0"

View File

@ -9,7 +9,7 @@ environment:
dependencies: dependencies:
flutter: flutter:
sdk: flutter sdk: flutter
google_sign_in: ^7.1.1
# equatable: ^2.0.5 # equatable: ^2.0.5
firebase_auth: ^6.1.3 firebase_auth: ^6.1.3
cloud_firestore: ^6.1.1 cloud_firestore: ^6.1.1

View File

@ -300,18 +300,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: google_sign_in_android name: google_sign_in_android
sha256: "5ec98ab35387c68c0050495bb211bd88375873723a80fae7c2e9266ea0bdd8bb" sha256: be0d0733a6a7c5da165879d844a239aa87587a3c767a9163faedde581f731f76
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "7.2.7" version: "7.2.10"
google_sign_in_ios: google_sign_in_ios:
dependency: transitive dependency: transitive
description: description:
name: google_sign_in_ios name: google_sign_in_ios
sha256: "234fc2830b55d1bbeb7e05662967691f5994143ff43dc70d3f139d1bbb3b8fb2" sha256: ac1e4c1205267cb7999d1d81333fccffdfda29e853f434bbaf71525498bb6950
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.2.5" version: "6.3.0"
google_sign_in_platform_interface: google_sign_in_platform_interface:
dependency: transitive dependency: transitive
description: description:
@ -324,10 +324,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: google_sign_in_web name: google_sign_in_web
sha256: "2fc1f941e6443b2d6984f4056a727a3eaeab15d8ee99ba7125d79029be75a1da" sha256: d473003eeca892f96a01a64fc803378be765071cb0c265ee872c7f8683245d14
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.1.0" version: "1.1.3"
hooks: hooks:
dependency: transitive dependency: transitive
description: description:

View File

@ -18,7 +18,7 @@ dependencies:
sdk: flutter sdk: flutter
flutter_bloc: ^8.1.0 flutter_bloc: ^8.1.0
google_fonts: ^8.0.2 google_fonts: ^8.0.2
google_sign_in: ^7.2.0 google_sign_in: ^7.1.1
intl: ^0.20.2 intl: ^0.20.2
monitoring_repository: monitoring_repository:
path: packages/monitoring_repository path: packages/monitoring_repository