Открыть диалог флаттера после навигации

Я вызываю Navigator pushReplacement, чтобы показать новое представление в своем приложении флаттера и хочу сразу же открыть простой диалог, чтобы ввести страницу пользователю. (Я хочу, чтобы пользователь мог видеть новое представление в фоновом режиме)

Если я вызываю showDialog в методе сборки виджета, а затем возвращу виджет (scaffold) из метода построения, я получаю ошибки, указывающие, что флаттер уже рисует виджет. Я ожидаю, что мне нужно прослушать событие сборки, а затем вызвать showDialog.

Руководство по тому, как это сделать высоко ценится.

Ответ 1

Вы можете вызвать диалоговое окно из "initState()", которое будет отображаться после первого кадра.

  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addPostFrameCallback((_) async {
      await showDialog<String>(
        context: context,
        builder: (BuildContext context) => new AlertDialog(
              title: new Text("title"),
              content: new Text("Message"),
              actions: <Widget>[
                new FlatButton(
                  child: new Text("OK"),
                  onPressed: () {
                    Navigator.of(context).pop();
                  },
                ),
              ],
            ),
      );
    });
  }

Ответ 2

Еще один способ сделать это - использовать Timer.run(...)

@override
void initState() {
  super.initState();

  // simply use this
  Timer.run(() {
    showDialog(
      context: context,
      builder: (_) => AlertDialog(title: Text("Dialog title")),
    );
  });
}