Dart foreach回路闭合内的开关断开

Dart foreach回路闭合内的开关断开,dart,dart-polymer,Dart,Dart Polymer,我有以下代码 void onSelectionChangedFredSources(事件、变量详细信息、, 选择复选框菜单(组件目标) { //getItemModels返回一个对象列表 getItemModels(target.selectedItems) ..forEach((项目) { 开关(item.label) { “耳朵”一案: 切换对话框('paper dialog transition center', $['ear-side-dialog']); 打破 “眼

我有以下代码

void onSelectionChangedFredSources(事件、变量详细信息、,
选择复选框菜单(组件目标)
{
//getItemModels返回一个对象列表
getItemModels(target.selectedItems)
..forEach((项目)
{          
开关(item.label)
{
“耳朵”一案:
切换对话框('paper dialog transition center',
$['ear-side-dialog']);
打破
“眼睛”一案:
切换对话框('paper dialog transition center',
$['eye-side-dialog']);
打破
“鼻孔”案例:
切换对话框('paper dialog transition center',
$['nostril-side-dialog']);
打破
“胸部”病例:
切换对话框('paper dialog transition center',
$['thorax-side-dialog']);
打破
违约:
srcDataMap.add(item.label,item.selected);
}   
});
}
当一个案例被触发时,我想打破foreach循环

请注意,每次选择更改时,target.selectedItems表达式都会返回所有选择。因此,如果“Ear”是第一个选择,则执行循环,然后选择“Eye”时,列表返回将同时包含Ear和Eye。 这最好怎么做?
谢谢

您不能打断每个电话

不能使用
break
,因为它不是循环。这是一个函数调用,break只在当前函数中起作用

您不能
返回
,因为这只会在下一个元素中继续

您可以抛出
来结束
forEach
,但这很难做到

您可以做的是根本不使用
forEach
,而是使用
for in
循环,然后使用标记的break将
中断

void onSelectionChangedFredSources(事件、变量详细信息、,
选择复选框菜单(组件目标){
//getItemModels返回一个对象列表
var models=getItemModels(target.selectedItems);
循环:for(模型中的变量项){
开关(项目标签){
“耳朵”一案:
“眼睛”一案:
“鼻孔”案例:
“胸部”病例:
toggleDialog('paper-dialog-transition-center',
$['${item.label.toLowerCase()}-端对话框']);
断环;
违约:
srcDataMap.add(item.label,item.selected);
}   
}
}

您需要使用带标签的
break
,因为如果没有标签,它只会中断
开关
语句。

您不能为此使用标签吗?你能解释一下你想要完成什么(除了结束据我所知不可能完成的
forEach
)吗?请点击并点击电影按钮。Goodfellas和Goddader被选中。getItemModels(target.selectedItems)将返回复选框的两个标签。在我的情况下,当我单击“Goodfellas”时,会切换一个对话框,让我使用与“movies”类似的组件进行另一个选择。一旦进行了第二个选择,我希望完全脱离循环,而不会触发另一个也会触发对话框。恐怕我无法理解此描述。如果您显示对话框并等待用户输入,则您必须已突破所处的任何循环。Dart是单线程的,因此如果您仍在循环中,浏览器的UI线程将无法显示任何对话框。即,“一旦进行第二次选择”太晚了,无法突破任何问题。感谢您的帮助。您的解决方案的问题是每个案例的失败。在我的案例中,一旦每个案例执行,循环必须退出,因为这是我需要执行的唯一案例,直到我做出另一个选择。上述案例无法完成此操作。哪一个失败?唯一的失败ugh在默认情况下,所有其他情况都会中断循环。您的原始代码在dafault情况下也不会中断。中断发生在所有情况都已执行之后。因此,如果选择了Ear和Eye,则对话框将触发两次,每次触发一次,然后循环中断。对于我的用例,每个情况下循环都必须中断。此代码将在“耳朵”、“眼睛”等的第一次匹配后,ks循环。你能确切地描述一下你想要它做什么吗?我不清楚“在每个案例后打破循环”是什么意思,因为打破循环意味着没有更多的案例被执行。