前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Flutter Widgets 之 SnackBa

Flutter Widgets 之 SnackBa

原创
作者头像
老孟Flutter
修改2020-03-02 07:45:39
1K0
修改2020-03-02 07:45:39
举报
文章被收录于专栏:Flutter

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

Flutter版本: 1.12.13+hotfix.5

Dart版本: 2.7.0

基础用法

应用程序有时候需要弹出消息提示用户,比如‘网络连接失败’、‘下载成功’等提示,就像Android

等Toast,在Flutter中使用SnackBar组件,用法如下:

代码语言:txt
复制
Scaffold.of(context).showSnackBar(SnackBar(

      content: Text('老孟,一枚有态度的程序员'),

    ));

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

代码语言:txt
复制
Scaffold.of(context).showSnackBar(SnackBar(

      duration: Duration(seconds: 1),

    ));

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

代码语言:txt
复制
Scaffold.of(context).showSnackBar(SnackBar(

      content: Row(

        children: <Widget>[

          Icon(Icons.check,color: Colors.green,),

          Text('下载成功')],

      ),

      duration: Duration(seconds: 1),

    ));

效果如下:

通过shape属性设置其形状:

代码语言:txt
复制
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,悬浮在底部,用法如下:

代码语言:txt
复制
Scaffold.of(context).showSnackBar(SnackBar(

      content: Row(

        children: <Widget>[

          Icon(Icons.check,color: Colors.green,),

          Text('下载成功')],

      ),

      behavior: SnackBarBehavior.floating,

    ));

floating效果:

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

代码语言:txt
复制
Scaffold.of(context).showSnackBar(SnackBar(

      content: Row(

        children: <Widget>[

          Icon(Icons.check,color: Colors.green,),

          Text('下载成功')],

      ),

      action: SnackBarAction(

        label: '知道了',

        onPressed: (){},

      ),

    ));

效果:

瞬间多个弹出延迟问题

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

代码语言:txt
复制
RaisedButton(

          child: Text(

            '点我,弹出SnackBar',

          ),

          onPressed: () {



            List.generate(10, (index){

              Scaffold.of(context).showSnackBar(SnackBar(

                content: Text('我是消息:$index'),

              ));

            });

          },

        )

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

代码语言:txt
复制
Scaffold.of(context).removeCurrentSnackBar();

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基础用法
  • 瞬间多个弹出延迟问题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档