Initial commit: Penyerahan final Source code Tugas Akhir
This commit is contained in:
161
lib/providers/firebase_authentication_provider.dart
Normal file
161
lib/providers/firebase_authentication_provider.dart
Normal file
@ -0,0 +1,161 @@
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user