googleLogin method

Future<Map<String, dynamic>> googleLogin()

Implementation

Future<Map<String, dynamic>> googleLogin() async {
  try {
    final GoogleSignInAccount? googleUser = await GoogleSignIn().signIn();

    if (googleUser == null) {
      return {
        'authenticated': false,
        'isNewUser': false
      }; // User cancelled the sign-in process
    }

    final GoogleSignInAuthentication googleAuth =
        await googleUser.authentication;

    final credential = GoogleAuthProvider.credential(
      accessToken: googleAuth.accessToken,
      idToken: googleAuth.idToken,
    );

    UserCredential userCredential =
        await FirebaseAuth.instance.signInWithCredential(credential);

    bool? isNewUser = userCredential.additionalUserInfo?.isNewUser;
    User? user = userCredential.user;

    if (user == null)
      return {'authenticated': false, 'isNewUser': isNewUser ?? false};

    dynamic data = await IvivaAccount().executeService('UXP.GoogleLogin', {
      'email': user.email!,
      'displayName': user.displayName ?? "",
      'photoUrl': user.photoURL ?? "",
    });

    await _authenticate(data[0]['apiKey']!);

    return {'authenticated': _authenticated, 'isNewUser': isNewUser ?? false};
  } catch (e) {
    lmLog(e, level: 1);
    return {'authenticated': false, 'isNewUser': false};
  }
}