zoukankan      html  css  js  c++  java
  • Flutter Widgets 之 SnackBar

    注意:无特殊说明,Flutter版本及Dart版本如下:

    • Flutter版本: 1.12.13+hotfix.5
    • Dart版本: 2.7.0

    基础用法

    应用程序有时候需要弹出消息提示用户,比如‘网络连接失败’、‘下载成功’等提示,就像Android
    等Toast,在Flutter中使用SnackBar组件,用法如下:

    Scaffold.of(context).showSnackBar(SnackBar(
          content: Text('老孟,一枚有态度的程序员'),
        ));
    

    注意并不是在build方法中直接使用SnackBar组件,而是调用Scaffold.of(context).showSnackBar方法,消息会在底部弹出并显示一段时间,默认显示4秒,然后弹出,我们可以设置其显示的时间:

    Scaffold.of(context).showSnackBar(SnackBar(
          duration: Duration(seconds: 1),
        ));
    

    显示的时间为1秒,content属性不一定是文字,也可以是其他组件,比如显示一个图标和文字:

    Scaffold.of(context).showSnackBar(SnackBar(
          content: Row(
            children: <Widget>[
              Icon(Icons.check,color: Colors.green,),
              Text('下载成功')],
          ),
          duration: Duration(seconds: 1),
        ));
    

    效果如下:

    通过shape属性设置其形状:

    Scaffold.of(context).showSnackBar(SnackBar(
          content: Row(
            children: <Widget>[
              Icon(Icons.check,color: Colors.green,),
              Text('下载成功')],
          ),
          shape: RoundedRectangleBorder(
            borderRadius: BorderRadius.all(Radius.circular(50))
          ),
          duration: Duration(seconds: 1),
        ));
    

    效果如下:

    SnackBar的有2种弹出形式,默认是fixed,直接在底部弹出,另一种是floating,悬浮在底部,用法如下:

    Scaffold.of(context).showSnackBar(SnackBar(
          content: Row(
            children: <Widget>[
              Icon(Icons.check,color: Colors.green,),
              Text('下载成功')],
          ),
          behavior: SnackBarBehavior.floating,
        ));
    

    floating效果:

    我们还可以对SnackBar增加行为组件,比如增加一个“知道了”按钮,点击“知道了”,消息马上隐藏,用法如下:

    Scaffold.of(context).showSnackBar(SnackBar(
          content: Row(
            children: <Widget>[
              Icon(Icons.check,color: Colors.green,),
              Text('下载成功')],
          ),
          action: SnackBarAction(
            label: '知道了',
            onPressed: (){},
          ),
        ));
    

    效果:

    瞬间多个弹出延迟问题

    当短时间内多次调用SnackBar方法时,SnackBar消息将会以队列的形式一个一个的弹出,比如下面的代码:

    RaisedButton(
              child: Text(
                '点我,弹出SnackBar',
              ),
              onPressed: () {
    
                List.generate(10, (index){
                  Scaffold.of(context).showSnackBar(SnackBar(
                    content: Text('我是消息:$index'),
                  ));
                });
              },
            )
    

    默认情况下每个显示4秒,如果有10个,那么40秒内会一直弹消息,体验明显不友好,我们希望的效果是如果有新的消息时,旧的都消息立刻消失,显示新的消息,只需在弹出新的SnackBar时移除现在的SnackBar,

    Scaffold.of(context).removeCurrentSnackBar();
    Scaffold.of(context).showSnackBar(...);
    

    更多相关阅读:

    如果这篇文章有帮助到您,希望您来个“赞”并关注我的公众号,非常谢谢。

  • 相关阅读:
    vue $refs的用法
    .net 合并GridView中某列相同信息的行(方法1)
    vue 将编号转换成名字显示
    base64转图片的工具网站
    html +css + js 实现自定义模态框
    asp 弹窗效果
    vue 关于$emit的用法
    Git 合并分支
    asp 学习网站
    Tomcat部署方法
  • 原文地址:https://www.cnblogs.com/mengqd/p/12391141.html
Copyright © 2011-2022 走看看