web-dev-qa-db-fra.com

Comment afficher le snack-bar après navigator.pop (contexte) dans Flutter?

Nous devons fermer un écran et ouvrir un deuxième écran. Et affichez le snack-bar sur le deuxième écran du premier écran.

J'ai essayé d'utiliser Navigator.Push, mais cet écran est déjà ouvert et nous avons cette erreur "Mauvais état: le flux a déjà été écouté".

12
Emily Harkness

Au lieu de Snackbar, je vous suggère d'utiliser le plugin Flushbar pour flutter, il est facile à utiliser et il s'occupe de tout et vous pouvez le personnaliser dans une large mesure. Snackbar a besoin d'un ancêtre d'échafaudage pour fonctionner, mais Flushbar ne le fait pas et il s'occupe de tout le reste et fournit une tonne de fonctionnalités intéressantes.

Plugin Flushbar ici

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

Je ne suis pas sûr de comprendre à 100% le cas d'utilisation que vous avez, mais en renvoyant les résultats des écrans et en passant des arguments à de nouvelles routes, vous pouvez contourner pratiquement n'importe quel scénario.

Prenons un exemple. A est l'écran d'origine, puis vous poussez l'écran B. Maintenant, vous voyez B, effectuez une action là-bas, faites-le apparaître, vous revenez à l'écran A et vous voulez afficher un snack-bar.

Lorsque vous pop, vous pouvez retourner un résultat et gérer ce résultat à partir de l'écran "parent" comme décrit dans le "Renvoyer les données d'un écran" livre de recettes.

Lorsque vous recevez un résultat, vous pouvez soit afficher une notification de snack-bar, soit alternativement (dans le cas où il y a un troisième écran), vous pouvez passer ce résultat à un autre écran comme argument .

0
Vince Varga