如何使用Flutter Widgets调用SnackBar方法
admin
2023-02-10 00:00:12
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: [
          Icon(Icons.check,color: Colors.green,),
          Text('下载成功')],
      ),
      duration: Duration(seconds: 1),
    ));

效果如下:

如何使用Flutter Widgets调用SnackBar方法

通过shape属性设置其形状:

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

效果如下:

如何使用Flutter Widgets调用SnackBar方法

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

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

floating效果:

如何使用Flutter Widgets调用SnackBar方法

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

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

效果:

如何使用Flutter Widgets调用SnackBar方法

瞬间多个弹出延迟问题

当短时间内多次调用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(...);


相关内容

热门资讯

【今日要闻】“白金岛.辅助器?... 网上科普关于“白金岛有没有挂”话题很是火热,小编也是针对白金岛作*弊开挂的方法以及开挂对应的知识点,...
【第一资讯】“乐酷炸金花.开挂... 【第一资讯】“乐酷炸金花.开挂神器?”太坑了果然有挂您好,乐酷炸金花这个游戏其实有挂的,确实是有挂的...
“姐姐为亡弟追凶27年”案被告... 澎湃新闻记者 陈绪厚12月23日上午,备受外界关注的“姐姐为亡弟追凶27年”迎来一审宣判,广东湛江中...
最新引进“皇豪众娱牛牛.辅助器... 有 亲,根据资深记者爆料皇豪众娱牛牛是可以开挂的,确实有挂(咨询软件无需...
终于懂了“越乡游义乌麻将.辅助... 网上科普关于“越乡游义乌麻将有没有挂”话题很是火热,小编也是针对越乡游义乌麻将作*弊开挂的方法以及开...
思特威、豪威国产旗舰传感器大曝... IT之家 12 月 23 日消息,博主 @数码闲聊站 今日爆料了多款国产旗舰手机影像传感器的后续规划...
【今日要闻】“胡一把麻将.可以... 【今日要闻】“胡一把麻将.可以开挂吗?”详细开挂教程您好,胡一把麻将这个游戏其实有挂的,确实是有挂的...
交通数智化转型提速 智慧赋能“... 人民网北京12月23日电 (记者乔雪峰)交通运输是培育新质生产力的关键领域,智慧交通作为交通强国建设...
【第一资讯】“春天扑克.到底是... 网上科普关于“春天扑克有没有挂”话题很是火热,小编也是针对春天扑克作*弊开挂的方法以及开挂对应的知识...
终于了解“畅游贵州麻将.有没有... 终于了解“畅游贵州麻将.有没有挂?”原来真的有挂您好,畅游贵州麻将这个游戏其实有挂的,确实是有挂的,...