Как запустить код после showDialog уволен в Flutter?

Как обновить домашнюю страницу сразу после showDialog() уволена /showDialog()? Не похоже, что у него есть onDispose().

Нашел еще один ответ. "WillPopScope" может помочь определить, нажата ли кнопка "Назад".

Виджет, который будет использоваться в "showDialog", в его функции построения виджет может быть завернут в "возвращенный новый WillPopScope (child: ______, onWillPop: _______); Код можно запустить в функции onWillPop. Это может обновить домашнюю страницу ниже.

Ответ 1

Просто используйте await, после чего код в блоке "then" будет запущен после закрытия диалогового окна.

await showDialog(
       //Your Dialog Code
).then((val){
    Navigator.pop(_context);
});

Ответ 2

Это действительно зависит от типа обновлений, которые вы хотите иметь.

Однако это простой пример, который может помочь вам разобраться в этом.

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

Ответ 3

Мобильные приложения обычно раскрывают свое содержимое через полноэкранные элементы, называемые "экранами" или "страницами". Во 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),
                ),
              ],
            ),
        );

Вы можете проверить официальный документ

Ответ 4

Заметил, что несколько из приведенных выше ответов были немного устаревшими из-за того, что конструкция "child", используемая с объектом AlertDialog, устарела.

Вот что я сейчас использую вместо этого для предупреждения о блокировке:

          showDialog(
            context: context,
            builder: (BuildContext context) {
              // return object of type Dialog
              return AlertDialog(
                title: new Text("Conversation Request"),
                content:
                    new Text("Have a conversation with this person"),
                actions: <Widget>[
                  // usually buttons at the bottom of the dialog
                  new FlatButton(
                    child: new Text("Accept"),
                    onPressed: () {
                      performAccept();
                    },
                  ),
                  new FlatButton(
                    child: new Text("Ignore"),
                    onPressed: () {
                      performIgnore();
                    },
                  )
                ],
              );
            },
          )