loginWithGoogle method

  1. @override
Future<DataResult<NUIGoogleLoginResult>> loginWithGoogle()
override

Implementation

@override
Future<DataResult<NUIGoogleLoginResult>> loginWithGoogle() async{
  try {
    final loginResult = await _googleSignIn.signIn();

    logNUI("NUIAuth", "Google sign in successful, email : ${loginResult?.email}, name : ${loginResult?.displayName}");
    final bool isSignedIn =  await _googleSignIn.isSignedIn();
    if(isSignedIn){
      final curUser = _googleSignIn.currentUser;

      final authentication = await curUser!.authentication;

      final googleResp = NUIGoogleLoginResult(displayName: curUser.displayName, id: curUser.id, email: curUser.email, photoUrl: curUser.photoUrl, idToken: authentication.idToken, serverAuthCode: curUser.serverAuthCode, isExpired: false);

      // if idToken is null or empty, return google login unsuccessful
      if(authentication.idToken.isNullOrEmpty()){ return DataResult<NUIGoogleLoginResult>(success: false, message: NUIAuthMessages.GOOGLE_LOGIN_UNSUCCESSFUL, code: '');}

      // send the token back to iStudio server
      final ssoReq = NUIAuthSSOSignUpReq(provider: NUIAuthSSOSignUpReq.SSO_TYPE_GOOGLE, providerToken: authentication.idToken!, email: curUser.email);
      final result = await _api.ssoLogin(request: ssoReq);

      if(result.success && result.data != null){
        // save the 3rd-party access token
        await secureStorage.write(key: _PREF_SSO_ACCESS_TOKEN, value:authentication.idToken);
        // save iStudio access token
        final authToken = NUIAuthAccessToken(token: result.data!.accessToken, refreshToken: result.data!.refreshToken);
        await _saveLoginResponseData(authToken);
        return DataResult<NUIGoogleLoginResult>(success: true, message: NUIAuthMessages.GOOGLE_LOGIN_SUCCESS, data: googleResp, code: '');
      }else{
        return DataResult<NUIGoogleLoginResult>(success: false, message: NUIAuthMessages.GOOGLE_LOGIN_UNSUCCESSFUL, code: '');
      }
    }
    else{
      return DataResult<NUIGoogleLoginResult>(success: false, message: NUIAuthMessages.GOOGLE_LOGIN_UNSUCCESSFUL, code: '');
    }
  } catch (error) {
    logNUI(_MODULE, "Failed to login with Google with error : $error");
    return DataResult(success: false, message: NUIAuthMessages.GOOGLE_LOGIN_FAILED, code: '');
  }
}