我们需要关闭一个屏幕,然后打开第二个屏幕。并在第一个屏幕的第二个屏幕上显示小吃店。
我尝试使用OnetoOne
,但是此屏幕已经打开,并且出现错误“状态错误:流已经被收听”。
答案 0 :(得分:2)
我建议您使用Flushbar插件代替Flukebar插件,它很容易使用,它将处理所有问题,您可以在很大程度上自定义它。 Snackbar需要一个脚手架祖先才能工作,但是 Flushbar不会,它会自己处理所有多余的东西,并提供大量的炫酷功能。
答案 1 :(得分:1)
我不确定我是否100%理解了您的用例,但是通过从屏幕返回结果并将参数传递给新路线,您基本上可以解决任何情况。
让我们举个例子。 A是原始屏幕,然后按屏幕B。现在,您将看到B,在该屏幕上执行一些操作,然后将其弹出,返回到屏幕A,并想要显示一个小吃栏。
pop
时,您可以返回结果并按照"Return data from a screen"食谱中的说明从“父”屏幕处理该结果。
收到结果后,您可以显示小吃店通知,或者可以选择{如果有第三个屏幕,则可以pass that result to another screen as argument。
答案 2 :(得分:0)
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(""))));
}
答案 3 :(得分:0)
屏幕 A
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => BScreen(
callbackFunction: (String resMessage){
print(resMessage);
},
),
),
);
屏幕 B
class BScreen extends StatefulWidget {
final Function callbackFunction;
BScreen({required this.callbackFunction});
@override
_BScreenState createState() => _BScreenState();
}
class _BScreenState extends State<BScreen> {
//
_performTask(){
// add your task here
// ..........
String msg = 'Task has been added';
widget.callbackFunction(msg);
Navigator.of(context).pop();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: ElevatedButton(
onPressed: () {
_performTask();
},
child: Text('Click Here'),
),
),
);
}
}
这个解决方案对我有用。乐于帮助他人 :) 感谢您提出这个问题。