如何在showDialog()被解雇/处置后更新主页?似乎它没有onDispose()功能.
找到另一个可能的答案:'WillPopScope'可以帮助检测后退按钮是否被按下.
将在'showDialog'中使用的小部件,在其构建函数中,小部件可以包含在'return new WillPopScope(child:______,onWillPop:_______)中; 代码可以在'onWillPop'函数中运行.这可以更新下面的主页.
Jal*_*tre 28
Simply use await and then, the code in "then" block will run after the dialog is dismissed
await showDialog(
//Your Dialog Code
).then((val){
Navigator.pop(_context);
});
Run Code Online (Sandbox Code Playgroud)
azi*_*iza 10
这实际上取决于您想要的更新类型.
但是,这是一个可以帮助您解决问题的简单示例.
class Home extends StatefulWidget {
@override
_HomeState createState() => new _HomeState();
}
class _HomeState extends State<Home> {
String _homeData = "initial data";
@override
Widget build(BuildContext context) {
return new Scaffold(
body: new Center(
child: new Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
new Text(_homeData),
new RaisedButton(
child: new Text("Show Dialog"),
onPressed: ()async{
bool shouldUpdate = await showDialog(
context: this.context,
child:new AlertDialog(
content: new FlatButton(
child: new Text("update home"),
onPressed: () => Navigator.pop(context, true),
),
),
);
setState(() {
shouldUpdate ? this._homeData = "updated" : null;
});
},
),
],
),
),
);
}
}
Run Code Online (Sandbox Code Playgroud)
小智 6
如果您为 DialogBox 和 onDissmissed 制作了另一个 StatefulWidget,您希望在“对话框调用小部件”中调用一些函数。你可以用这个片段。
await showDialog(
context: context,
builder: (_) => MenuBox(),
);
print("now closed");
Run Code Online (Sandbox Code Playgroud)
移动应用程序通常通过称为“屏幕”或“页面”的全屏元素来显示其内容。在Flutter中,这些元素称为路由,由Navigator小部件管理。导航器管理Route对象的堆栈,并提供用于管理堆栈的方法,例如Navigator.push和Navigator.pop。
showDialog(
context: context,
child: new AlertDialog(
title: const Text("Your Title"),
content: const Text(
...
Your Message
...),
actions: [
new FlatButton(
child: const Text("Ok"),
onPressed: () => Navigator.pop(context),
),
],
),
);
Run Code Online (Sandbox Code Playgroud)
您可以检查官方文件
当点击对话框外部时,返回值为 null,因此我预计可能为 null 并检查 null,结果为 false。
onPressed: () async {
bool? result = await showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text('Select Entity'),
content: setupAlertDialogContainer(),
);
},
);
if (result ?? false) {
doWhatYouNeedTo();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11339 次 |
| 最近记录: |