From 0596fd4a75f21b63b24ad24ac0e0f5fa8dafa1d6 Mon Sep 17 00:00:00 2001 From: sindhu Date: Fri, 26 Jan 2024 23:04:24 +0700 Subject: [PATCH] step 14 : fix bug loginscreen current user from package google sign in --- lib/screen/home/home_screen.dart | 16 +-- lib/screen/login/login_screen.dart | 150 +++++++++++++++-------------- 2 files changed, 87 insertions(+), 79 deletions(-) diff --git a/lib/screen/home/home_screen.dart b/lib/screen/home/home_screen.dart index 568d4fd..19d472d 100644 --- a/lib/screen/home/home_screen.dart +++ b/lib/screen/home/home_screen.dart @@ -32,8 +32,10 @@ class HomeScreen extends HookConsumerWidget { ref.watch(currentCheckJamPresensiProvider); final positionLatitude = useState(""); final positionLongitude = useState(""); - GoogleSignInAccount? currentUserGoogle = - ref.watch(currentUserGoogleProvider); + // GoogleSignInAccount? currentUserGoogle = + // ref.watch(currentUserGoogleProvider); + + final googleSignIn = ref.watch(googleSignInProvider); useEffect(() { WidgetsBinding.instance.addPostFrameCallback((timeStamp) async { @@ -281,7 +283,7 @@ class HomeScreen extends HookConsumerWidget { right: Constant.getActualXPhone(context: context, x: 27), ), child: Container( - child: (currentUserGoogle == null) + child: (googleSignIn.currentUser == null) ? Center( child: CircularProgressIndicator(), ) @@ -296,12 +298,13 @@ class HomeScreen extends HookConsumerWidget { // ), // ), leading: GoogleUserCircleAvatar( - identity: currentUserGoogle, + identity: googleSignIn.currentUser!, ), title: Text( // "Stephen Kusumo", // selectedUser?.model.name ?? "", - currentUserGoogle.displayName ?? "", + // currentUserGoogle.displayName ?? "", + googleSignIn.currentUser?.displayName ?? "", overflow: TextOverflow.ellipsis, style: Constant.titleH1_700(context: context) ..copyWith( @@ -311,7 +314,8 @@ class HomeScreen extends HookConsumerWidget { subtitle: Text( // "Step@example.com", // currentUserGoogle?.email ?? "", - selectedUser?.model.email ?? "", + // selectedUser?.model.email ?? "", + googleSignIn.currentUser?.email ?? "", style: Constant.subtitle_500_12(context: context) .copyWith( diff --git a/lib/screen/login/login_screen.dart b/lib/screen/login/login_screen.dart index 80e8735..0f04304 100644 --- a/lib/screen/login/login_screen.dart +++ b/lib/screen/login/login_screen.dart @@ -25,89 +25,77 @@ class LoginScreen extends HookConsumerWidget { // inisialisasi // ref.watch itu sama spt memantau state terus menerus // ref.read itu memantau namun hny 1x saja - GoogleSignInAccount? currentUserGoogle = - ref.watch(currentUserGoogleProvider); + // GoogleSignInAccount? currentUserGoogle = + // ref.watch(currentUserGoogleProvider); final googleSignIn = ref.watch(googleSignInProvider); final isLoading = useState(false); - final errorMessage = useState(""); + // final errorMessage = useState(""); final isSuccess = useState(false); useEffect(() { WidgetsBinding.instance.addPostFrameCallback((timeStamp) async { - final staffID = ref.read(currentUserProvider)?.model.staffId ?? "0"; + // final staffID = ref.read(currentUserProvider)?.model.staffId ?? "0"; + final shared = await SharedPreferences.getInstance(); + final bearerString = shared.get(Constant.bearerName).toString(); + final xmodel = jsonDecode(bearerString); + if (xmodel == null) return; + final authModel = AuthModel( + token: xmodel["token"], + model: StaffModel( + companyId: xmodel["model"]["companyId"], + companyName: xmodel["model"]["companyName"], + email: xmodel["model"]["email"], + staffId: xmodel["model"]["staffId"], + idGoogleSignIn: xmodel['model']['idGoogleSignIn'], + name: xmodel['model']['name'], + nip: xmodel['model']['nip'], + phoneNumber: xmodel["model"]["phoneNumber"], + token: xmodel["model"]["token"], + ), + ); + // ref.read(currentUserProvider.notifier).state = authModel; + + await googleSignIn.signInSilently(); googleSignIn.onCurrentUserChanged.listen((account) { - ref - .read(currentUserGoogleProvider.notifier) - .update((state) => account); - }); - googleSignIn.signInSilently(); - // if (currentUserGoogle != null && staffID == "0") { - // ref.read(loginProvider.notifier).login( - // currentUserGoogle.email, - // currentUserGoogle.id, - // ); - // } - - if (currentUserGoogle != null) { - if (staffID == "0") { - ref.read(loginProvider.notifier).login( - currentUserGoogle.email, - currentUserGoogle.id, - ); - } - } - }); - return () {}; - }, [currentUserGoogle]); - - useEffect(() { - return () {}; - }, [currentUserGoogle]); - - WidgetsBinding.instance.addPostFrameCallback((timeStamp) async { - final staffID = ref.read(currentUserProvider)?.model.staffId ?? "0"; - final shared = await SharedPreferences.getInstance(); - final bearerString = shared.get(Constant.bearerName).toString(); - final xmodel = jsonDecode(bearerString); - if (xmodel == null) return; - final authModel = AuthModel( - token: xmodel["token"], - model: StaffModel( - companyId: xmodel["model"]["companyId"], - companyName: xmodel["model"]["companyName"], - email: xmodel["model"]["email"], - staffId: xmodel["model"]["staffId"], - idGoogleSignIn: xmodel['model']['idGoogleSignIn'], - name: xmodel['model']['name'], - nip: xmodel['model']['nip'], - phoneNumber: xmodel["model"]["phoneNumber"], - token: xmodel["model"]["token"], - ), - ); - - googleSignIn.onCurrentUserChanged.listen((account) { - if (account != null && staffID == "0") { - ref - .read(currentUserGoogleProvider.notifier) - .update((state) => account); + // ref + // .read(currentUserGoogleProvider.notifier) + // .update((state) => account); ref.read(currentUserProvider.notifier).state = authModel; ref.read(currentPageProvider.state).update((state) => 0); - Navigator.of(context).pushNamedAndRemoveUntil( - homeRoute, - (route) => false, - ); + + if (account != null && + ref.read(currentUserProvider)?.model.staffId == "0") { + // Lakukan login + ref.read(loginProvider.notifier).login( + account.email, + account.id, + ); + } + }); + + // kalau sudah pernah login + if (googleSignIn.currentUser?.email != null) { + googleSignIn.signInSilently(); + // ref.read(currentUserGoogleProvider.notifier).update( + // (state) => googleSignIn.currentUser, + // ); + ref.read(loginProvider.notifier).login( + googleSignIn.currentUser?.email ?? "", + googleSignIn.currentUser?.id ?? "", + ); } + + // ref.read(currentUserProvider.notifier).state = authModel; + + // Navigator.of(context).pushNamedAndRemoveUntil( + // homeRoute, + // (route) => false, + // ); }); - - // ref.read(currentUserProvider.notifier).state = authModel; - - // Navigator.of(context).pushNamedAndRemoveUntil( - // homeRoute, - // (route) => false, - // ); - }); + return () {}; + }, []); // LISTEN PROVIDER ref.listen(loginProvider, (prev, next) { @@ -121,6 +109,7 @@ class LoginScreen extends HookConsumerWidget { // }); SanckbarWidget(context, next.message, snackbarType.warning); } else if (next is LoginStateDone) { + print("Login Done"); isLoading.value = false; isSuccess.value = true; ref.read(currentPageProvider.state).update((state) => 0); @@ -135,9 +124,9 @@ class LoginScreen extends HookConsumerWidget { // auth ke email await googleSignIn.signIn(); googleSignIn.onCurrentUserChanged.listen((account) async { - ref - .read(currentUserGoogleProvider.notifier) - .update((state) => account); + // ref + // .read(currentUserGoogleProvider.notifier) + // .update((state) => account); // Check jika account tidak null dan belum login if (account != null && @@ -150,6 +139,21 @@ class LoginScreen extends HookConsumerWidget { } }); googleSignIn.signInSilently(); + + // kalau sudah pernah login + if (googleSignIn.currentUser?.email != null) { + googleSignIn.signInSilently(); + // ref.read(currentUserGoogleProvider.notifier).update( + // (state) => googleSignIn.currentUser, + // ); + ref.read(loginProvider.notifier).login( + googleSignIn.currentUser?.email ?? "", + googleSignIn.currentUser?.id ?? "", + ); + } + + // Navigator.of(context) + // .pushNamedAndRemoveUntil(homeRoute, (route) => false); } catch (error) { if (kDebugMode) { print(error);