我在 flutter 中的目标是确保应用程序在用户注销后关闭。不过,我这里有一个小问题。
在我的应用程序中,系统会询问用户是否要注销,如果按“是”,则会执行以下代码。
onPressed: () async {
var auth = FirebaseAuth.instance;
await auth.signOut();
FirebaseAuth.instance.authStateChanges().listen((User? user) {
if (user == null) {
print('Exiting app');
exit(8); //this closes the app
}
});
},
但是,这导致我在控制台中收到一条消息,表明用户已注销,然后应用程序按预期关闭。但是,如果我随后打开该应用程序,用户将再次登录。我怎样才能防止这种情况发生?
我的控制台输出(按下按钮后)如下:
D/FirebaseAuth( 2809): Notifying id token listeners about a sign-out event.
D/FirebaseAuth( 2809): Notifying auth state listeners about a sign-out event.
I/flutter ( 2809): Exiting app
出现您面临的问题是因为
exit()
强行关闭应用程序而没有正确保存用户的注销状态。这可能会阻止 Firebase 完全处理注销事件。
相反,请使用
SystemNavigator.pop()
,并确保清除任何已存储的会话(如果使用过它):
onPressed: () async {
var auth = FirebaseAuth.instance;
await auth.signOut(); // Signs out the user
// Clear any local storage or session data
// For example, using shared preferences:
SharedPreferences prefs = await SharedPreferences.getInstance();
await prefs.clear(); // Clear stored user session
FirebaseAuth.instance.authStateChanges().listen((User? user) {
if (user == null) {
print('User logged out successfully');
SystemNavigator.pop(); // Close the app gracefully
}
});
},