【问题标题】:Flutter snackbar dismiss on SnackBarAction onPressed在 SnackBarAction onPressed 上颤振小吃吧
【发布时间】:2019-07-24 03:04:18
【问题描述】:

我想在 SnackBarActiononPressed 方法上关闭 SnackBar。我尝试使用Navigator.of(context).pop();,但SnackBar 并没有让我的屏幕变黑。

代码如下:

 void showInSnackBar(String value) {
homeScaffoldKey.currentState.showSnackBar(new SnackBar(content: new Text(value),
  action: SnackBarAction(
    label: 'Dissmiss',
    textColor: Colors.yellow,
    onPressed: () {
    //  Navigator.of(context).pop();
    },
  ),));
}

【问题讨论】:

    标签: dart flutter snackbar


    【解决方案1】:

    尝试使用hideCurrentSnackBar方法

    onPressed: () {
        homeScaffoldKey.currentState.hideCurrentSnackBar();
    },
    

    更多信息在这里:https://docs.flutter.io/flutter/material/ScaffoldState/hideCurrentSnackBar.html

    【讨论】:

      【解决方案2】:

      你也可以使用,

      Scaffold.of(context).hideCurrentSnackBar();
      

      使用上下文时要小心,使用正确的上下文。

      注意

      在新的 Flutter 版本中,此方法已被弃用。 因此使用

      ScaffoldMessenger.of(context).hideCurrentSnackBar();
      

      【讨论】:

      • 你也可以使用 Scaffold.of(context).removeCurrentSnackBar() 在没有退出动画的情况下立即关闭 SnackBar。
      • 更好地使用键而不是上下文,
      • 现在已弃用,因此我们可以改用ScaffoldMessenger.of(context).hideCurrentSnackBar()
      【解决方案3】:

      如果你想替换只显示一次的snackbar,

        final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();
        final snackBar = SnackBar(content: Text("Hello, world"));
      

      还有,

      @override
      Widget build(BuildContext context) {
      return Scaffold(
        key: _scaffoldKey,
      

      还有,

      onPressed: () {
          _scaffoldKey.currentState.removeCurrentSnackBar();
          _scaffoldKey.currentState.showSnackBar(snackBar);
           }
      

      【讨论】:

      • 我喜欢这个解决方案,因为它可以立即移除小吃店。 (我认为)在我的情况下,如果进行了一系列“showSnackBar()”调用,我不会留下一排小吃店动画播放。
      【解决方案4】:

      ScaffoldMessenger.of(context).hideCurrentSnackBar();

      【讨论】:

      • 这是任何新人的最新答案 --> 自 Flutter 2.0 以来,scaffold.snackbar 已被弃用,scaffold messenger 是新的发展方式
      【解决方案5】:

      Scaffold.of(context).hideCurrentSnackBar(); 上面的方法以前用过,但是,

      ScaffoldMessenger.of(context).hideCurrentSnackBar(); 现在建议这样做。

      【讨论】:

        【解决方案6】:

        您也可以在没有任何键的情况下显示和关闭这样的快餐栏

        ScaffoldMessenger.of(context).showSnackBar(
          SnackBar(
            content: Text('Hello from snackbar!'),
            action: SnackBarAction(
              label: 'Dissmiss',
              textColor: Colors.yellow,
              onPressed: () {
                ScaffoldMessenger.of(context).hideCurrentSnackBar();
              },
            ),
          ),
        );
        

        【讨论】:

          【解决方案7】:

          定义你的SnackBar

          var snackBar = SnackBar(content: Text('Hello World'));
          

          展示它:

          ScaffoldMessenger.of(context).showSnackBar(snackBar);
          

          隐藏它:

          ScaffoldMessenger.of(context).hideCurrentSnackBar();
          

          隐藏最后一个并显示一个新的:

          ScaffoldMessenger.of(context) 
            ..hideCurrentSnackBar()
            ..showSnackBar(snackBar);
          

          【讨论】:

            【解决方案8】:

            要清除以前的snackbars 并只显示新的snackbars,请使用removeCurrentSnackBar 方法而不是hideCurrentSnackBar,因为它不会清除堆栈。所以代码将是

            ScaffoldMessenger.of(context) 
              ..removeCurrentSnackBar()
              ..showSnackBar(snackBar);
            

            【讨论】:

              猜你喜欢
              • 2020-07-12
              • 1970-01-01
              • 2020-09-07
              • 2018-07-03
              • 2020-02-20
              • 2020-10-18
              • 2021-08-07
              • 2019-05-30
              • 1970-01-01
              相关资源
              最近更新 更多