web-dev-qa-db-ja.com

Flutterでnavigator.pop(context)の後にスナックバーを表示する方法は?

1つの画面を閉じて2番目の画面を開く必要があります。そして、最初の画面から2番目の画面にスナックバーを表示します。

Navigator.Pushを使用しようとしましたが、この画面はすでに開いており、このエラーが表示されます。「不良状態:ストリームは既にリッスンされています」。

12
Emily Harkness

Snackbarの代わりに、フラッターにFlushbarプラグインを使用することをお勧めします。プラグインは使いやすく、すべての面倒を見てくれるので、大幅にカスタマイズできます。スナックバーは動作するために足場の祖先を必要としますが、フラッシュバーは動作せず、すべての余分なもの自体を処理し、たくさんのクールな機能を提供します。

ここにフラッシュバープラグイン

4
Aman Malhotra
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(""))));
}
0
user11065582

私はあなたが持っているユースケースを100%理解しているとは思えませんが、画面から結果を返し、引数を新しいルートに渡すことで、基本的にあらゆるシナリオを回避できます。

例を見てみましょう。 Aが元の画面で、次に画面Bをプッシュします。Bが表示され、そこでアクションを実行してポップし、画面Aに戻ってスナックバーを表示します。

popを実行すると、 「画面からデータを返す」 クックブックで説明されているように、「親」画面から結果を返し、その結果を処理できます。

結果を受け取ったら、スナックバー通知を表示するか、または(3番目の画面がある場合)、その結果を 引数として別の画面に渡すことができます

0
Vince Varga