сегодня я попытался построить 2 экрана: «войти с GG» и «перенаправить выход на экран входа в систему».Добиться успеха!Но когда я снова захожу, предыдущая учетная запись gg сразу заходит в систему, не требуя всплывающего окна входа.На моем устройстве запомнился зарегистрированный аккаунт.Как полностью выйти и снова войти в систему с другими учетными записями.Вот мой код: у меня есть «домашняя страница с логином через Google» и «домашняя страница с кнопкой выхода».Кроме того, у меня есть api.dart для входа и выхода, а главная страница использует маршруты до 2 страниц.- Главная страница:
routes: {
"home-page": (context) => MyHomePage(),
"game-center": (context) => GameCenterPage(),
},
home: MyHomePage(),
- Api.dart:
class FBApi {
static FirebaseAuth _auth = FirebaseAuth.instance;
static GoogleSignIn _googleSignIn = GoogleSignIn();
FirebaseUser firebaseUser;
FBApi(FirebaseUser user) {
this.firebaseUser = user;
}
static Future<FBApi> signInWithGoogle() async {
final GoogleSignInAccount googleUser = await _googleSignIn.signIn();
final GoogleSignInAuthentication googleAuth = await googleUser.authentication;
final FirebaseUser user = await _auth.signInWithGoogle(
accessToken: googleAuth.accessToken,
idToken: googleAuth.idToken,
);
assert(user.email != null);
assert(user.displayName != null);
assert(await user.getIdToken() != null);
final FirebaseUser currentUser = await _auth.currentUser();
assert(user.uid == currentUser.uid);
return FBApi(user);
}
static Future<void> signOut() async {
await _auth.signOut().then((_) {
print("***** log out...what the hell?");
// Navigator.of(context).pushNamedAndRemoveUntil("/login",
ModalRoute.withName("/home"));
});
}
}
- gameCenter.dart:
onPressed: () async {
_signOut();
Navigator.of(context).pushNamedAndRemoveUntil("home-page", ModalRoute.withName("game-center"));
},
- home.dart
class MyHomePage extends StatelessWidget {
Future<bool> _loginUser() async {
final api = await FBApi.signInWithGoogle();
if (api != null) {
return true;
} else {
return false;
}
}
...