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é".
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.
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(""))));
}
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 .