【发布时间】:2021-02-07 17:32:57
【问题描述】:
每当用户关闭应用程序时,他们都必须重新登录。我查看并尝试实现 authStateChanges。但是我的应用程序仍然强制用户在关闭应用程序后重新登录。在 App 类中,您可以看到我尝试完全执行 authStateChange,但不幸的是,似乎什么也没发生。
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(App());
}
// Firebase Auth Instance
FirebaseAuth auth = FirebaseAuth.instance;
class MyApp extends StatelessWidget {
final Future<FirebaseApp> _initialization = Firebase.initializeApp();
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Tanbo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: LoginPage(),
);
}
}
// This is the main root screen of the Tanbo app
class App extends StatelessWidget {
final Future<FirebaseApp> _initialization = Firebase.initializeApp();
@override
Widget build(BuildContext context) {
return FutureBuilder(
// Initialize FlutterFire
future: _initialization,
builder: (context, snapshot) {
final user = FirebaseAuth.instance.authStateChanges().listen((User user) {
if (user == null) {
print('User signed out');
} else {
print('User signed in');
}
});
// Check for errors
if (snapshot.hasError) {
return ErrorHandler();
}
// Once complete, show your application
if (snapshot.connectionState == ConnectionState.done) {
// If the user isn't logged in, we will be sent to sign up page.
if (user != null) {
return MyApp();
} else {
// If the user is logged in, TabHandler will be shown.
return TabHandler();
}
}
// Otherwise, show something whilst waiting for initialization to complete
return LoadingHandler();
},
);
}
}
【问题讨论】:
-
您必须在您传递给listen() 的回调中在 内响应用户状态的变化,而不是在设置监听器之后立即响应。只有在您添加监听器一段时间后,用户才会再次有效登录,并且只有您的监听器才会知道该更改。
标签: firebase flutter dart firebase-authentication