显示 Snackbar
如何实现用于显示消息的 Snackbar。
当某些操作发生时,向用户进行简要提示非常有用。例如,当用户从列表中滑走一条消息时,你可能希望通知他们消息已被删除。你甚至可以为他们提供一个撤销该操作的选项。
在 Material Design 中,这项工作由 SnackBar 完成。本指南通过以下步骤实现 Snackbar:
- 创建一个
Scaffold。 - 显示一个
SnackBar。 - 提供一个可选操作。
1. 创建 Scaffold
#
在构建遵循 Material Design 指南的应用程序时,请赋予应用一致的视觉结构。在此示例中,将 SnackBar 显示在屏幕底部,且不遮挡其他重要的组件,例如 FloatingActionButton。
来自 material 库 的 Scaffold 组件可以创建这种视觉结构,并确保重要组件不会发生重叠。
dart
return MaterialApp(
title: 'SnackBar Demo',
home: Scaffold(
appBar: AppBar(title: const Text('SnackBar Demo')),
body: const SnackBarPage(),
),
);
2. 显示 SnackBar
#
有了 Scaffold 后,就可以显示 SnackBar 了。首先,创建一个 SnackBar,然后使用 ScaffoldMessenger 将其显示出来。
dart
const snackBar = SnackBar(content: Text('Yay! A SnackBar!'));
// Find the ScaffoldMessenger in the widget tree
// and use it to show a SnackBar.
ScaffoldMessenger.of(context).showSnackBar(snackBar);
3. 提供可选操作
#当 SnackBar 显示时,你可能希望为用户提供一个操作。例如,如果用户不小心删除了某条消息,SnackBar 中的 action 可以允许用户恢复该消息。
以下是一个为 SnackBar 组件提供额外 action 的示例:
dart
final snackBar = SnackBar(
content: const Text('Yay! A SnackBar!'),
action: SnackBarAction(
label: 'Undo',
onPressed: () {
// Some code to undo the change.
},
),
);
互动示例
#import 'package:flutter/material.dart';
void main() => runApp(const SnackBarDemo());
class SnackBarDemo extends StatelessWidget {
const SnackBarDemo({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'SnackBar Demo',
home: Scaffold(
appBar: AppBar(title: const Text('SnackBar Demo')),
body: const SnackBarPage(),
),
);
}
}
class SnackBarPage extends StatelessWidget {
const SnackBarPage({super.key});
@override
Widget build(BuildContext context) {
return Center(
child: ElevatedButton(
onPressed: () {
final snackBar = SnackBar(
content: const Text('Yay! A SnackBar!'),
action: SnackBarAction(
label: 'Undo',
onPressed: () {
// Some code to undo the change.
},
),
);
// Find the ScaffoldMessenger in the widget tree
// and use it to show a SnackBar.
ScaffoldMessenger.of(context).showSnackBar(snackBar);
},
child: const Text('Show SnackBar'),
),
);
}
}