取り急ぎの記事です。言いたいことは、
await FirebaseAuth.instance.currentUser!.updateProfile(displayName: null);
だと実際にはnullにしてくれなくて、
await FirebaseAuth.instance.currentUser!.updateProfile(displayName: "");
にすると、
FirebaseAuth.instance.currentUser!.displayName
が null
になった、ということです。
void signInWithGoogle() async {
try {
// Googleサインインのためのインスタンスを作成し、サインインを開始する
final GoogleSignInAccount? gUser = await GoogleSignIn().signIn();
// ユーザーがサインインをキャンセルした場合の処理
if (gUser == null) {
// サインインがキャンセルされたため、falseを返して処理を終了
return false;
}
// サインインに成功した場合、Google認証情報を取得する
final GoogleSignInAuthentication gAuth = await gUser.authentication;
// Firebaseにログインするための資格情報を作成する
final credential = GoogleAuthProvider.credential(
accessToken: gAuth.accessToken, // Googleから取得したアクセストークン
idToken: gAuth.idToken, // Googleから取得したIDトークン
);
// FirebaseAuthを使用して、取得した資格情報を使ってサインインを行う
final userCredential = await FirebaseAuth.instance.signInWithCredential(credential);
// サインイン処理が成功すると、FirebaseAuth.instance.currentUserにユーザー情報が設定される
// 初回サインインの場合のみ、displayNameをnullに設定する
if (userCredential.additionalUserInfo!.isNewUser) {
await FirebaseAuth.instance.currentUser!.updateProfile(displayName: "");
await FirebaseAuth.instance.currentUser!.reload(); // ユーザー情報を再読み込み
}
} catch (e) {
log('Googleサインインエラー: $e');
}
}