【发布时间】:2020-12-01 14:26:24
【问题描述】:
我在应用中显示 SnackBar 时遇到问题。
我的应用要求用户注册。以下只是我的注册功能的一个简化版本:
Registration.dart:
void loginPage()
{
Navigator.pushNamed(context, "/login",
arguments: <String, bool>{
"regSuccess" : true
});
Navigator.of(context).pushNamedAndRemoveUntil('/login', (Route<dynamic> route) => false);
}
Widget build(BuildContext context)
{
return Scaffold(
key: scaffoldKey,
body: Form(
key: _formKey,
child:
Center(
child:
Column(
child:
ElevatedButton(
child:
Text("Register"),
onPressed: () {
if(_formKey.currentState.validate())
{
loginPage();
}
},
),
]
),
),
),
);
当用户单击注册按钮时,他们将被重定向到 登录 页面,并且所有以前的路由都将使用Navigator.of(context).pushNamedAndRemoveUntil('/login', (Route<dynamic> route) => false); 删除。数据也会通过Navigator.pushNamed 函数发送回注册页面。
以下是登录页面的简化功能:
Login.dart
void showRegSnackbar()
{
scaffoldKey.currentState.showSnackBar(SnackBar(
content: Text(
"Registration Successful!",
textAlign: TextAlign.center,
style: TextStyle(fontSize: 25),
),
));
}
Widget build(BuildContext context)
{
final Map arguments = ModalRoute.of(context).settings.arguments as Map;
if (arguments != null)
{
if(arguments['regSuccess'] == true)
{
WidgetsBinding.instance.addPostFrameCallback((_) => showRegSnackbar());
print(arguments['regSuccess']);
}
}
}
然后登录页面将显示SnackBar,通知用户他们已成功注册自己。但是,从 Login 调用 Navigator.of(context).pushNamedAndRemoveUntil() 会阻止 SnackBar 显示。
调用Navigator.of(context).pushNamedAndRemoveUntil()函数后如何显示SnackBar?
【问题讨论】: