【问题标题】:Navigator.of(context).pushNamedAndRemoveUntil() prevents SnackBar from displayingNavigator.of(context).pushNamedAndRemoveUntil() 阻止 SnackBar 显示
【发布时间】: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&lt;dynamic&gt; route) =&gt; 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

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    你可以用flushbar代替snackbar 它更可定制 Flushbar 不需要脚手架祖先来工作,但是 小吃店有, 此外,Flushbar 不像小吃吧那么重,它也解决了您当前的问题。 您可以安装它并使用它来代替小吃店

    Flushbar Plugin here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-14
      • 2020-09-02
      相关资源
      最近更新 更多