我创建了一个登录屏幕,当用户按下登录按钮时,它会调用一个事件 LoginButtonOnPressedEvent。 下面是我的 LoginBloc 类中的 onLoginButtonOnPressedEvent 函数。
Future<void> _onLoginButtonPressedEvent(
LoginButtonPressedEvent event, Emitter<LoginScreenState> emit) async {
GoogleSignIn _googleSignIn = GoogleSignIn(scopes: ['email']);
GoogleSignInAccount? user = _googleSignIn.currentUser;
await _googleSignIn.signIn();
emit(LoginScreenState(user: user));
print("USER DETAILS : ${user}");
}
我在登录屏幕中触发此事件,如下所示,其中 RippleButton 是我制作的自定义按钮。
RippleButton(
onTap: () {
context.read<LoginScreenBloc>().add(LoginButtonPressedEvent());
},
),
当我点击按钮时,不会显示选择帐户的弹出窗口,而是屏幕变得有点暗,然后恢复正常。
下面是调用事件相关的日志
I/ContentCaptureHelper(30073): Setting logging level to OFF
I/flutter (30073): USER DETAILS : null
I/et_schedule_ap(30073): Background concurrent copying GC freed 2871953(94MB) AllocSpace
objects, 9(308KB) LOS objects, 87% free, 3450KB/27MB, paused 142us,42us total 104.801ms
W/et_schedule_ap(30073): Reducing the number of considered missed Gc histogram windows
from 171 to 100
我也遇到了这个问题,对我有用的是在尝试再次打开 Google 帐户选择弹出窗口之前注销,这意味着我的代码如下所示:
onPressed: () async {
await _googleSignIn.signOut();
await _googleSignIn.signIn();
},
确保您“退出”,因为它第一次出现,但如果您还没有登录,那么之后就会出现“退出”
GoogleSignIn().signOut();
只需使用这个:-
Future<void> _onLoginButtonPressedEvent() async {
GoogleSignIn _googleSignIn = GoogleSignIn();
try {
GoogleSignInAccount? result = await _googleSignIn.signIn();
name = result!.displayName;
email = result.email;
password = result.id;
print(result);
} catch (error) {
print(error);
}
}
要在弹出窗口中显示谷歌登录,只需拨打
signOut()
_googleSignIn.signOut();
我也遇到过类似的情况,请确保您正确退出。就我而言,这是因为我没有打电话
_googleSignIn.signOut();
。我按照 this 进行登录,我的注销方法如下 -
Future signOut() async {
try {
await _firebaseAuth.signOut();
} catch (err) {
log(err.toString());
}
}
当我尝试再次登录时,没有出现弹出窗口,并且我已登录到之前选择的帐户。添加
_googleSignIn.signOut()
后,我收到了用于登录的弹出窗口。
谢谢