如何在 showDialog() 被解雇/处置后更新主页?似乎它没有 onDispose() 功能 .
showDialog()
onDispose()
找到另一个可能的答案:'WillPopScope'可以帮助检测后退按钮是否被按下 .
将在'showDialog'中使用的小部件,在其构建函数中,小部件可以包含在'return new WillPopScope(child:____,onWillPop:_____)中;代码可以在'onWillPop'函数中运行 . 这可以更新下面的主页 .
这实际上取决于您想要的更新类型 .
但是,这是一个可以帮助您解决问题的简单示例 .
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; }); } ) ], ), ), ); } }
移动应用程序通常通过名为"screens"或"pages"的全屏元素显示其内容 . 在Flutter中,这些元素称为路径,它们由 Navigator 小部件管理 . 导航器管理一堆Route对象,并提供管理堆栈的方法,如 Navigator.push 和 Navigator.pop .
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), ), ], ), );
你可以查看Official Document
2 回答
这实际上取决于您想要的更新类型 .
但是,这是一个可以帮助您解决问题的简单示例 .
移动应用程序通常通过名为"screens"或"pages"的全屏元素显示其内容 . 在Flutter中,这些元素称为路径,它们由 Navigator 小部件管理 . 导航器管理一堆Route对象,并提供管理堆栈的方法,如
Navigator.push
和Navigator.pop
.你可以查看Official Document