Flutter 对话框以某种方式触发父小部件的导航器路由
Flutter dialog is somehow triggering navigators routing for parent widget
我的对话框有问题。
我有一个主屏幕,其中包含导航到第二个屏幕的代码:
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 : ""),
);
},
);
根据flutter开发者的说法,重建widgets是理想的场景。他们在 git issues 中提到了这一点。架构设计的设计应牢记小部件应该被重建。不再一次又一次地重建 widgets,是 flutter 提供的一种优化。但不应假定这是 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 : ""),
);
},
);
根据flutter开发者的说法,重建widgets是理想的场景。他们在 git issues 中提到了这一点。架构设计的设计应牢记小部件应该被重建。不再一次又一次地重建 widgets,是 flutter 提供的一种优化。但不应假定这是 flutter 中小部件的默认行为。默认行为是重建。希望这对您有所帮助!