SnackBar 是 Flutter Material Design 中的一个轻量级消息提示控件,用于向用户显示简短的操作反馈信息。它通常出现在屏幕底部,短暂显示后自动消失。
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('这是一条消息'),
),
);
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('这条消息会显示更久'),
duration: Duration(seconds: 5), // 自定义显示时间
),
);
属性 | 类型 | 说明 |
---|---|---|
content |
Widget | 必需,SnackBar的主要内容,通常是Text |
duration |
Duration | 显示时长,默认4秒 |
action |
SnackBarAction | 可选的操作按钮 |
backgroundColor |
Color | 背景颜色 |
elevation |
double | 阴影高度 |
shape |
ShapeBorder | 自定义形状 |
behavior |
SnackBarBehavior | 显示行为(fixed或floating) |
width |
double | 仅当behavior为floating时有效,设置宽度 |
padding |
EdgeInsets | 内边距 |
dismissDirection |
DismissDirection | 滑动关闭的方向 |
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('文件已删除'),
action: SnackBarAction(
label: '撤销',
textColor: Colors.white,
onPressed: () {
// 执行撤销操作
},
),
),
);
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('自定义样式SnackBar'),
backgroundColor: Colors.indigo,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
),
behavior: SnackBarBehavior.floating,
margin: EdgeInsets.all(10),
),
);
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('浮动式SnackBar'),
behavior: SnackBarBehavior.floating,
margin: EdgeInsets.all(20), // 设置外边距
),
);
当需要用户交互时,可以使用 SnackBarAction:
属性 | 类型 | 说明 |
---|---|---|
label |
String | 按钮文本 |
onPressed |
VoidCallback | 点击回调 |
textColor |
Color | 文本颜色 |
disabledTextColor |
Color | 禁用状态文本颜色 |
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
Widget build(BuildContext context) {
return MaterialApp(
title: 'SnackBar Demo',
home: Scaffold(
appBar: AppBar(title: Text('SnackBar Demo')),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
onPressed: () => _showSimpleSnackBar(context),
child: Text('简单SnackBar'),
),
ElevatedButton(
onPressed: () => _showActionSnackBar(context),
child: Text('带操作的SnackBar'),
),
ElevatedButton(
onPressed: () => _showStyledSnackBar(context),
child: Text('自定义样式SnackBar'),
),
],
),
),
),
);
}
void _showSimpleSnackBar(BuildContext context) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('这是一个简单的SnackBar消息'),
duration: Duration(seconds: 2),
),
);
}
void _showActionSnackBar(BuildContext context) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('文件已删除'),
duration: Duration(seconds: 3),
action: SnackBarAction(
label: '撤销',
onPressed: () {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('撤销操作已执行')),
);
},
),
),
);
}
void _showStyledSnackBar(BuildContext context) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('自定义样式SnackBar'),
backgroundColor: Colors.purple,
shape: StadiumBorder(),
behavior: SnackBarBehavior.floating,
margin: EdgeInsets.all(20),
duration: Duration(seconds: 2),
),
);
}
}
SnackBar 是 Flutter 中实现轻量级用户反馈的理想选择,合理使用可以显著提升用户体验。
结束语
Flutter是一个由Google开发的开源UI工具包,它可以让您在不同平台上创建高质量、美观的应用程序,而无需编写大量平台特定的代码。我将学习和深入研究Flutter的方方面面。从基础知识到高级技巧,从UI设计到性能优化,欢饮关注一起讨论学习,共同进入Flutter的精彩世界!