跳至主要內容

顯示 Snackbar

當某些動作發生時,短暫地通知您的使用者會很有用。例如,當使用者在清單中滑開訊息時,您可能想要通知他們該訊息已刪除。您甚至可能想要給他們還原動作的選項。

在 Material Design 中,這是 SnackBar 的工作。本食譜使用以下步驟實作 snackbar

  1. 建立 Scaffold
  2. 顯示 SnackBar
  3. 提供選用的動作。

1. 建立 Scaffold

#

在建立遵循 Material Design 指南的應用程式時,請為您的應用程式提供一致的視覺結構。在此範例中,將 SnackBar 顯示在螢幕底部,而不會與其他重要的 Widget 重疊,例如 FloatingActionButton

來自 material 函式庫Scaffold Widget 會建立這種視覺結構,並確保重要的 Widget 不會重疊。

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 中的可選動作來復原訊息。

以下是一個範例,說明如何為 SnackBar Widget 提供額外的 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'),
      ),
    );
  }
}