Flutter对话框以某种方式触发导航器为父窗口小部件进行路由

时间:2018-05-26 21:18:04

标签: alertdialog flutter

我的对话有问题。

我有一个主屏幕,其代码可以导航到第二个屏幕,如下所示:

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 :(得分:1)

根据开发人员的情况,重建小部件是理想的方案。他们在git issues中提到了这一点。在设计体系结构设计时,应牢记应该重建小部件。 flutter提供的优化是不一次又一次地重建小部件。但是,不应假定这是窗口小部件在flutter中的默认行为。默认行为是重建。希望这会有所帮助!