Reactライクにクロスプラットフォームなアプリがかけるところに魅力を感じ最近はFlutterの勉強をしている。
ボタンが押されたときとかにスナックバーを出したい。
MaterialAppのScaffoldを使っているのであればScaffoldMessengerというものを使えば良い。
具体的には下記のような感じ。
ビルドコンテキストで一番近い親のScaffoldMessengerに対してスナックバーを出す指示を送る感じ。
なので、注意点としてはScaffoldMessenger.of(context)
が実行されたウィジェットより上の階層でScaffoldMessengerがいないとエラーになるということ。
下記のサンプルコードではスナックバーを表示するロジックをHomeというウィジェット内で実行しており、そのウィジェットをMyAppというウィジェットで使っている。そのためHomeからみると親としてMyApp内でScaffoldMessengerが定義されているので (正確にはMaterialApp)、ScaffoldMessengerを見つけることができる。
一方でもしHomeに切り出さずMyApp内でスナックバー表示ロジックを実行すると、MyAppより上の階層にはScaffoldMessengerはいないのでエラーになる。