Диалог Flutter как-то запускает навигаторы для родительского виджета - PullRequest
0 голосов
/ 27 мая 2018

У меня проблема с моим диалогом.

У меня есть домашний экран с кодом для перехода ко второму экрану, например так:

Navigator.push(context, MaterialPageRoute(
            builder: (context) {
              return SecondScreen("myData");
            }
          ));

Это переходит к следующему экранукак это должно.На втором экране я в конечном итоге показываю диалоговое окно, оно отображается правильно, но как только я нажимаю на TextFormField в диалоге, вышеупомянутая функция конструктора вызывается снова, создавая мой SecondScreen снова и снова.Затем, как только я закрываю диалог с помощью pop (), он снова вызывает приведенный выше код.

Я хочу иметь возможность использовать мой диалог без запуска приведенного выше фрагмента кода.Кто-нибудь знает, как это сделать или почему это происходит?

РЕДАКТИРОВАТЬ - Вот код, показывающий, как отображается диалоговое окно:

StreamBuilder<String>(
  stream: model.taxStream,
  builder: (context, snapshot) {
    return ListTile(
      onTap: () async {
        double taxAmount = await showEditAmountDialog(
          context, "Tax", model.taxValue());
        if (taxAmount != null) {
          model.setTax(taxAmount);
        }
      },
      title: Text("Tax"),
      trailing: Text(snapshot.hasData ? snapshot.data : ""),
     );
   },
 );

1 Ответ

0 голосов
/ 12 октября 2018

По словам разработчиков флаттера, восстановление виджетов - желаемый сценарий.Они упоминали об этом в git Issues .Проект архитектуры должен быть разработан с учетом того, что виджеты должны быть перестроены.Не перестраивать виджеты снова и снова, это оптимизация, которую обеспечивает флаттер.Но не следует предполагать, что это поведение по умолчанию для виджетов во флаттере.Поведение по умолчанию - перестроить.Надеюсь, это поможет!

...