gpt4 book ai didi

flutter - 如何以编程方式在 flutter 中使用后退选项

转载 作者:IT王子 更新时间:2023-10-29 07:18:28 25 4
gpt4 key购买 nike

我正在调用一个方法并尝试在横断面完成后返回。但是代码不起作用。这是我正在尝试的,

onPressed: (){
_updateResult(context);
},

void _updateResult(BuildContext context) async{
// some api calls and checks goes here
Navigator.of(context).pop();
}

这是我访问页面的方式

Navigator.push(context, SlideLeftRoute(page: EnterResult(item)));

我有一个自定义类 SlideLeftRoute

class SlideLeftRoute extends PageRouteBuilder {
final Widget page;
SlideLeftRoute({this.page})
: super(
pageBuilder: (
BuildContext context,
Animation<double> animation,
Animation<double> secondaryAnimation,
) =>
page,
transitionsBuilder: (
BuildContext context,
Animation<double> animation,
Animation<double> secondaryAnimation,
Widget child,
) =>
SlideTransition(
position: Tween<Offset>(
begin: const Offset(1, 0),
end: Offset.zero,
).animate(animation),
child: child,
),
);
}

问题代码

我发现了哪些代码会产生问题。在这里,我调用了另一种显示对话的方法。如果我评论它工作的代码

  void _showMsg(msg) {
// flutter defined function
showDialog(
context: context,
builder: (BuildContext context) {
// return object of type Dialog
return AlertDialog(
backgroundColor: Colors.grey[800],
content: new Text(msg,
style: TextStyle(
color: Colors.white,
fontSize: 14.0,
decoration: TextDecoration.none,
fontFamily: 'Lato',
fontWeight: FontWeight.normal,
),
),
//content: new Text("Alert Dialog body"),
actions: <Widget>[
// usually buttons at the bottom of the dialog
new FlatButton(
child: new Text("Close"),
onPressed: () {
Navigator.of(context).pop();
},
),
],
);
},
);

}

因此,在 api 调用完成后,它应该会转到后屏幕,但什么也没有发生。

谢谢。

最佳答案

问题是因为当您从警报 AlertDialog 的操作中调用 Navigator.of(context).pop(); 时,它会弹出显示的对话框。您必须再次弹出屏幕。为此,您可以通过 showDialog 方法使用 future 返回。

那就是改变你的 _showMsg 方法,如下所示。

注意 showDialog 上的 then(..)...

void _showMsg(msg) async {
// flutter defined function
await showDialog(
context: context,
builder: (BuildContext localContext) {
// return object of type Dialog
return AlertDialog(
backgroundColor: Colors.grey[800],
content: new Text(
msg,
style: TextStyle(
color: Colors.white,
fontSize: 14.0,
decoration: TextDecoration.none,
fontFamily: 'Lato',
fontWeight: FontWeight.normal,
),
),
//content: new Text("Alert Dialog body"),
actions: <Widget>[
// usually buttons at the bottom of the dialog
new FlatButton(
child: new Text("Close"),
onPressed: () async {
print("poping");
Navigator.of(context).pop();
},
),
],
);
},
).then((value) {
print("poping from screen");
Navigator.of(context).pop();
});
}

关于flutter - 如何以编程方式在 flutter 中使用后退选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56564388/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com