[Flutter] SnackBar を表示させる

Toastのようにユーザーにメッセージを出して認識してもらうためのWidgetとしてSnackBarがあります
Androidでは、そのまま SnackBar というのがありますが、iOSには同じものはありません
似たものとしては、メッセージを表示するToastやUIAlertControllerがあります

1x1.trans - [Flutter] SnackBar を表示させる




SnackBar

 

最初に、SnackBarはこちらにあるようにScaffoldが重要になります
また、メッセージの表示以外のアクションをさせることも可能です

  1. Create a Scaffold
  2. Display a SnackBar
  3. Provide an optional action

「No ScaffoldMessenger widget found」のエラーが出る場合は #2 を確認してください

1. Create a Scaffold

2. Display a SnackBar

ここまでをまとめて
ボタンタップでSnackBarが表示されるコードはこのようになります

スクリーン下にメッセージが表示されました

1x1.trans - [Flutter] SnackBar を表示させる

3. Provide an optional action

SnackBar の特徴として、単なるToastなどとは異なりボタンアクションなどを追加することができます

例えば、ボタンをタップしてSnackBarを表示させ
右端にButtonというテキストボタンを作成して
Textの表示を変えるアクションを入れるとこうなります

 

 

サンプルコード

 

以上をまとめて、多少見やすくすると

main.dart

Show SnackBar ボタンをタップして

1x1.trans - [Flutter] SnackBar を表示させる

スクリーン下にSnackBarが表示されます

右端の Button をタップすると
OK? からYes! にTextが変更され
SnackBarのActionが確認されます



 

No ScaffoldMessenger widget found

 

SnackBar でこのようなエラーになった場合、

No ScaffoldMessenger widget found.
MainApp widgets require a ScaffoldMessenger widget ancestor.

1x1.trans - [Flutter] SnackBar を表示させる


 
こちらに説明がありますが
 
I am trying to create a snackbar on the click of a button in flutter, but getting exception that No ScaffoldMessenger widget found. The same code seems to work ...

 
SnackBarを表示するために必要な ScaffoldMessenger が
context の上位に存在しないとエラーになり
Scaffoldを正しく親ウィジェットとして配置する必要があるようです

ScaffoldMessenger.of(context).showSnackBar(snackBar);
この context が Scaffold の子Widgetであることを確認しないといけません
 

 

 
 

References:
SnackBar class
Display a snackbar
ScaffoldMessenger class

シェアする

  • このエントリーをはてなブックマークに追加

フォローする