在执行动作后生成Flutter路由吗?

17 浏览
0 Comments

在执行动作后生成Flutter路由吗?

在成功登录后,我想要自动返回到我的菜单界面,但是我在生成小部件构建和/或上下文方面遇到了问题。我是在一个无状态小部件中进行这个操作的。以下是我的代码。我希望在最后一个打印语句后调用路由...

Future _handleSignIn() async {

try {

await _googleSignIn.disconnect();

GoogleSignInAccount googleUser = await _googleSignIn.signIn();

GoogleSignInAuthentication googleAuth = await googleUser.authentication;

print(googleAuth.idToken);

await FirebaseAuth.instance.signInWithGoogle(idToken: googleAuth.idToken, accessToken: googleAuth.accessToken);

} catch (error) {

print(error);

}

print("开始吧");

print(_googleSignIn.currentUser.displayName);

print(FirebaseAuth.instance.currentUser);

}

0
0 Comments

问题的原因:

问题是由于_checkSignIn()方法被调用时没有使用"await"关键字,导致在进行登录检查时无法正确生成Flutter路由。

解决方法:

为了解决这个问题,可以在_build()方法中使用"await"关键字来等待_checkSignIn()方法完成后再继续执行后续操作。将_checkSignIn()方法改为异步方法,然后在_build()方法中使用"await"关键字来等待其完成。这样可以确保在进行登录检查后再进行路由导航。

修改后的代码如下:

class SplashScreen extends StatelessWidget {

Future<bool> _checkSignIn(BuildContext context) async {

await globals.checkSignIn();

globals.intialRoute = '/';

if (globals.signInMode == SignInMode.SignedIn) {

Navigator.of(context).pushNamedAndRemoveUntil('/', ModalRoute.withName('/splash'));

} else {

Navigator.pushReplacementNamed(context, '/login');

}

return true;

}

Widget build(BuildContext context) async {

await _checkSignIn(context);

return Scaffold(

body: Column(

mainAxisAlignment: MainAxisAlignment.center,

crossAxisAlignment: CrossAxisAlignment.center,

children: const <Widget>[

CircularProgressIndicator(),

],

),

);

}

}

通过以上修改,问题应该就可以得到解决了。

0
0 Comments

问题的原因是需要在登录成功后设置按钮将用户重定向到指定页面。解决方法是在按钮的onPressed方法中添加代码,在登录成功后使用Navigator.of(context).pushNamed("/MyHome")将用户重定向到指定页面。需要注意的是,Navigator只能在build方法内部使用,所以在处理导航部分时,需要在小部件内部处理。可以通过将当前小部件的context传递给Navigator来访问它,并在_handleSignIn方法中使用该context将路由推送到Navigator中。

代码如下:

onPressed: () {_handleSignIn().whenComplete( () => Navigator.of(context).pushNamed("/MyHome"));

}

请注意,只要将当前小部件的context传递给Navigator,就可以访问它:`onPressed: () => _handleSignIn(context)`,然后在_handleSignIn中使用该context将路由推送到Navigator中。

0