appleLogin function

Future<String?> appleLogin()

Implementation

Future<String?> appleLogin() async {
  AuthorizationCredentialAppleID? credential;

  localSettings.saveLogin("", "", "");

  credential = await SignInWithApple.getAppleIDCredential(
    scopes: [
      AppleIDAuthorizationScopes.email,
      AppleIDAuthorizationScopes.fullName,
    ],
  );
  if (credential.email != null)
    dprint(credential.email!);

  try {
    userAccountData.userSocialLogin = "apple";

    final rawNonce = generateNonce();
    // final nonce = sha256ofString(rawNonce);

    final oauthCredential = OAuthProvider("apple.com").credential(
      idToken: credential.identityToken,
      rawNonce: rawNonce,
    );

    var t = await FirebaseAuth.instance.signInWithCredential(oauthCredential);
    final User? user = t.user;
    if (user == null)
      return "user == null";

    var querySnapshot = await FirebaseFirestore.instance.collection("listusers").doc(user.uid).get();
    var data = querySnapshot.data();
    if (data != null && data.isNotEmpty)
      return null;

    FirebaseFirestore.instance.collection("listusers").doc(user.uid).set({
      "visible": true,
      "phoneVerified": false,
      "email": user.email,
      "phone": "",
      "name": user.displayName ?? "",
      "date_create" : FieldValue.serverTimestamp(),
      "socialLogin" : "apple"
    });
  } catch (e) {
    print(e);
    return "appleLogin " + e.toString();
  }
  return null;
}