162 lines
4.8 KiB
Dart
162 lines
4.8 KiB
Dart
import 'package:firebase_auth/firebase_auth.dart';
|
|
import 'package:flutter/material.dart';
|
|
// import 'package:flutter_facebook_auth/flutter_facebook_auth.dart';
|
|
import 'package:google_sign_in/google_sign_in.dart';
|
|
import 'package:initial_folder/helper/user_info.dart';
|
|
import 'package:initial_folder/models/user_model.dart';
|
|
import 'package:initial_folder/services/auth_service.dart';
|
|
|
|
class FirebaseAuthenticationProvider extends ChangeNotifier {
|
|
final googleSignIn = GoogleSignIn();
|
|
GoogleSignInAccount? _user;
|
|
GoogleSignInAccount get user => _user!;
|
|
|
|
UserModel? _userModel;
|
|
UserModel? get userModel => _userModel;
|
|
|
|
set userModel(UserModel? userModel) {
|
|
_userModel = userModel;
|
|
notifyListeners();
|
|
}
|
|
|
|
Future googleSignUp() async {
|
|
final googleUser = await googleSignIn.signIn();
|
|
if (googleUser == null) return;
|
|
_user = googleUser;
|
|
final googleAuth = await googleUser.authentication;
|
|
final credential =
|
|
GoogleAuthProvider.credential(accessToken: googleAuth.idToken);
|
|
await FirebaseAuth.instance.signInWithCredential(credential);
|
|
await AuthService().googleSignInAuth(
|
|
idToken: googleAuth.idToken ?? '',
|
|
// email: googleUser.email,
|
|
// password: '',
|
|
);
|
|
// _userModel = userModel;
|
|
await UsersInfo().setEmail(googleUser.email);
|
|
notifyListeners();
|
|
return true;
|
|
}
|
|
|
|
Future<bool> googleLogin() async {
|
|
try {
|
|
print('Preparing');
|
|
final googleUser = await googleSignIn.signIn();
|
|
print('Start');
|
|
if (googleUser == null) {
|
|
print('Failed');
|
|
await logout();
|
|
return false;
|
|
}
|
|
|
|
print('State 1');
|
|
final GoogleSignInAuthentication googleAuth =
|
|
await googleUser.authentication;
|
|
|
|
final credential = GoogleAuthProvider.credential(
|
|
accessToken: googleAuth.accessToken,
|
|
idToken: googleAuth.idToken,
|
|
);
|
|
|
|
print('State 2');
|
|
final userCredential =
|
|
await FirebaseAuth.instance.signInWithCredential(credential);
|
|
|
|
print("ID Token: ${googleAuth.idToken}");
|
|
|
|
await AuthService().googleSignInAuth(
|
|
idToken: googleAuth.idToken ?? '',
|
|
);
|
|
// _userModel = userModel;
|
|
|
|
print('State 3');
|
|
await UsersInfo().setEmail(googleUser.email);
|
|
|
|
print('Login sukses');
|
|
notifyListeners();
|
|
return true;
|
|
} catch (e) {
|
|
// print(e);
|
|
// return false;
|
|
if (e.toString() == 'Exception: Akun anda belum terdaftar') {
|
|
await logout();
|
|
throw Exception('Akun anda belum terdaftar');
|
|
} else {
|
|
print(e);
|
|
await logout();
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Future facebookLogin() async {
|
|
// try {
|
|
// final LoginResult facebookSignIn = await FacebookAuth.instance.login();
|
|
// if (facebookSignIn.accessToken == null) {
|
|
// await logout();
|
|
// return false;
|
|
// }
|
|
// switch (facebookSignIn.status) {
|
|
// case LoginStatus.success:
|
|
// try {
|
|
// final facebookAuthCredential = FacebookAuthProvider.credential(
|
|
// facebookSignIn.accessToken!.token);
|
|
// await FirebaseAuth.instance
|
|
// .signInWithCredential(facebookAuthCredential);
|
|
|
|
// String name = await FacebookAuth.instance
|
|
// .getUserData()
|
|
// .then((data) => data['name']);
|
|
// String email = await FacebookAuth.instance
|
|
// .getUserData()
|
|
// .then((data) => data['email']);
|
|
// String pictureUrl = await FacebookAuth.instance
|
|
// .getUserData()
|
|
// .then((data) => data['picture']['data']['url']);
|
|
|
|
// UserModel userModel = await AuthService().facebookSignInAuth(
|
|
// name: name,
|
|
// email: email,
|
|
// password: '',
|
|
// pictureUrl: pictureUrl,
|
|
// );
|
|
// _userModel = userModel;
|
|
|
|
// await UsersInfo().setEmail(email);
|
|
|
|
// notifyListeners();
|
|
// return true;
|
|
// } catch (e) {
|
|
// await logout();
|
|
// return false;
|
|
// }
|
|
// case LoginStatus.cancelled:
|
|
// await logout();
|
|
// return false;
|
|
// case LoginStatus.failed:
|
|
// await logout();
|
|
// return false;
|
|
// default:
|
|
// await logout();
|
|
// return false;
|
|
// }
|
|
// } catch (e) {
|
|
// await logout();
|
|
// return false;
|
|
// }
|
|
// }
|
|
|
|
Future logout() async {
|
|
try {
|
|
if (googleSignIn.currentUser != null) {
|
|
await googleSignIn.disconnect();
|
|
} // else if (await FacebookAuth.instance.accessToken != null) {
|
|
// await FacebookAuth.instance.logOut();
|
|
// }
|
|
} finally {
|
|
FirebaseAuth.instance.signOut();
|
|
notifyListeners();
|
|
}
|
|
}
|
|
}
|