好了,您可以使用另一种方法解决此类问题。而是检查您的loginScreen类中是否有用户登录,您可以在此之前执行此步骤,然后决定是否有用户登录时是否显示loginScreen或显示另一个屏幕,我想是MainScreen,如果该用户已登录。
。
我将简要介绍如何完成此操作。希望对您有所帮助。但是在我向您解释源代码中有什么问题之前。
if(FirebaseAuth.instance.currentUser() != null){ // wrong call in wrong place! Navigator.of(context).pushReplacement(MaterialPageRoute( builder: (context) => HomeScreen() ));}您的代码已损坏,因为它
currentUser()是一个异步函数,并且在您进行调用时,此函数将返回一个不完整的Future对象,该对象是一个非null的对象。因此,导航
pushReplacement
器始终被调用,并且由于小部件的状态尚未就绪而崩溃。
作为解决方案,您可以使用FutureBuilder并确定将打开哪个屏幕。
int main(){ runApp( YourApp() )}class YourApp extends StatelessWidget{ @override Widget build(BuildContext context){ return FutureBuilder<FirebaseUser>( future: FirebaseAuth.instance.currentUser(), builder: (BuildContext context, AsyncSnapshot<FirebaseUser> snapshot){ if (snapshot.hasData){ FirebaseUser user = snapshot.data; // this is your user instance /// is because there is user already logged return MainScreen(); } /// other way there is no user logged. return LoginScreen(); } ); }}使用这种方法可以避免LoginScreen类来验证是否有用户登录!
建议您可以将
snapshot.connectionState属性与一起使用,
switch case以实现更精细的控件。



