首页 文章

如何在Flutter中解除showDialog之后的运行代码?

提问于
浏览
2

如何在 showDialog() 被解雇/处置后更新主页?似乎它没有 onDispose() 功能 .

找到另一个可能的答案:'WillPopScope'可以帮助检测后退按钮是否被按下 .

将在'showDialog'中使用的小部件,在其构建函数中,小部件可以包含在'return new WillPopScope(child:____,onWillPop:_____)中;代码可以在'onWillPop'函数中运行 . 这可以更新下面的主页 .

2 回答

  • 5

    这实际上取决于您想要的更新类型 .

    但是,这是一个可以帮助您解决问题的简单示例 .

    enter image description here

    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;
                   });
                   }
                )
              ],
            ),
          ),
        );
      }
    }
    
  • 2

    移动应用程序通常通过名为"screens"或"pages"的全屏元素显示其内容 . 在Flutter中,这些元素称为路径,它们由 Navigator 小部件管理 . 导航器管理一堆Route对象,并提供管理堆栈的方法,如 Navigator.pushNavigator.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

相关问题