1つの画面を閉じて2番目の画面を開く必要があります。そして、最初の画面から2番目の画面にスナックバーを表示します。
Navigator.Push
を使用しようとしましたが、この画面はすでに開いており、このエラーが表示されます。「不良状態:ストリームは既にリッスンされています」。
Snackbarの代わりに、フラッターにFlushbarプラグインを使用することをお勧めします。プラグインは使いやすく、すべての面倒を見てくれるので、大幅にカスタマイズできます。スナックバーは動作するために足場の祖先を必要としますが、フラッシュバーは動作せず、すべての余分なもの自体を処理し、たくさんのクールな機能を提供します。
showSubmitRequestSnackBar(BuildContext context) async {
Flushbar(
flushbarPosition: FlushbarPosition.BOTTOM,
message: "Request Successfully Saved",
icon: Icon(
Icons.info_outline,
size: 28.0,
color: Colors.red,
),
backgroundColor: Colors.red,
duration: Duration(seconds: 5),
leftBarIndicatorColor: Colors.red,
)
..show(context).then((r)=> Navigator.Push(
context, MaterialPageRoute(builder: (context) => ListPage(""))));
}
私はあなたが持っているユースケースを100%理解しているとは思えませんが、画面から結果を返し、引数を新しいルートに渡すことで、基本的にあらゆるシナリオを回避できます。
例を見てみましょう。 Aが元の画面で、次に画面Bをプッシュします。Bが表示され、そこでアクションを実行してポップし、画面Aに戻ってスナックバーを表示します。
pop
を実行すると、 「画面からデータを返す」 クックブックで説明されているように、「親」画面から結果を返し、その結果を処理できます。
結果を受け取ったら、スナックバー通知を表示するか、または(3番目の画面がある場合)、その結果を 引数として別の画面に渡すことができます 。