将 Flutter SDK 更新为 Null Safety 时 Switch Case 发生变化
Switch Case change when updated Flutter SDK to Null Safety
所以我更新了 Flutter SDK,我的 swtich case 函数工作相同,但现在每个 case 之后的 break;
被视为死代码。我想知道这是为什么?我尝试删除 return
语句,但是当获得正确的参数时 UI 不会 switch/change。代码:
更新前的旧 Switch case 语句:
panelButtonsChange() {
switch (Provider.of<Store>(context).panelButtons) {
case 1:
return SomeClassButton(
onPressed: () {
store.setNumber(2);
},
buttonTitle: "Action 1",
);
break;
case 2:
return SomeClassButton(
onPressed: () {
store.setNumber(3);
},
buttonTitle: "Action 2",
);
break;
case 3:
return SomeClassButton(
onPressed: () {
store.setNumber(4);
},
buttonTitle: "Action 3");
break;
}
return SomeClassButton(
onPressed: () {
store.setNumber(1);
},
buttonTitle: "Default action",
);
}
相同的 Switch case 语句,但在更新为空安全 (SDK >=2.12.0
) 之后:
panelButtonsChange() {
switch (Provider.of<Store>(context).panelButtons) {
case 1:
return SomeClassButton(
onPressed: () {
store.setNumber(2);
},
buttonTitle: "Action 1",
);
break; // THIS IS NOW DEAD CODE
case 2:
return SomeClassButton(
onPressed: () {
store.setNumber(3);
},
buttonTitle: "Action 2",
);
break; // THIS IS NOW DEAD CODE
case 3:
return SomeClassButton(
onPressed: () {
store.setNumber(4);
},
buttonTitle: "Action 3");
break; // THIS IS NOW DEAD CODE
}
return SomeClassButton(
onPressed: () {
store.setNumber(1);
},
buttonTitle: "Default action",
);
}
如果我删除新更新的 switch case 中的 return
语句,那么问题是 UI 中的按钮不会改变,因为它缺少 return
陈述。 break;
现在是否已弃用,或者我在这里遗漏了什么?奇怪的是它仍然像以前一样正常工作,但我不确定它是否应该以这种方式工作,我是否应该删除死代码。提前感谢你的帮助。
更新:我不使用 return
但执行操作的情况(在本例中调用 API):
switch (buttonNumber) {
case 0:
SomeActionClass(context).fetchAPI();
break;
case 1:
SomeActionClass(context).fetchOtherAPI();
break;
case 2:
SomeActionClass(context).fetchYetAnotherAPI();
break;
}
这里我没有return语句但是API调用是根据满足的情况执行的。
之所以这么说,是因为 return
之后的每个 break
永远不会被实际执行。我的意思是,return
之后的任何代码都不会被执行,break
也不例外。您可以简单地删除中断,您的代码甚至不会注意到。 switch
将像以前一样运行,因为当它找到相关的 case
时,该函数将 return
并且不会评估其他情况。
所以我更新了 Flutter SDK,我的 swtich case 函数工作相同,但现在每个 case 之后的 break;
被视为死代码。我想知道这是为什么?我尝试删除 return
语句,但是当获得正确的参数时 UI 不会 switch/change。代码:
更新前的旧 Switch case 语句:
panelButtonsChange() {
switch (Provider.of<Store>(context).panelButtons) {
case 1:
return SomeClassButton(
onPressed: () {
store.setNumber(2);
},
buttonTitle: "Action 1",
);
break;
case 2:
return SomeClassButton(
onPressed: () {
store.setNumber(3);
},
buttonTitle: "Action 2",
);
break;
case 3:
return SomeClassButton(
onPressed: () {
store.setNumber(4);
},
buttonTitle: "Action 3");
break;
}
return SomeClassButton(
onPressed: () {
store.setNumber(1);
},
buttonTitle: "Default action",
);
}
相同的 Switch case 语句,但在更新为空安全 (SDK >=2.12.0
) 之后:
panelButtonsChange() {
switch (Provider.of<Store>(context).panelButtons) {
case 1:
return SomeClassButton(
onPressed: () {
store.setNumber(2);
},
buttonTitle: "Action 1",
);
break; // THIS IS NOW DEAD CODE
case 2:
return SomeClassButton(
onPressed: () {
store.setNumber(3);
},
buttonTitle: "Action 2",
);
break; // THIS IS NOW DEAD CODE
case 3:
return SomeClassButton(
onPressed: () {
store.setNumber(4);
},
buttonTitle: "Action 3");
break; // THIS IS NOW DEAD CODE
}
return SomeClassButton(
onPressed: () {
store.setNumber(1);
},
buttonTitle: "Default action",
);
}
如果我删除新更新的 switch case 中的 return
语句,那么问题是 UI 中的按钮不会改变,因为它缺少 return
陈述。 break;
现在是否已弃用,或者我在这里遗漏了什么?奇怪的是它仍然像以前一样正常工作,但我不确定它是否应该以这种方式工作,我是否应该删除死代码。提前感谢你的帮助。
更新:我不使用 return
但执行操作的情况(在本例中调用 API):
switch (buttonNumber) {
case 0:
SomeActionClass(context).fetchAPI();
break;
case 1:
SomeActionClass(context).fetchOtherAPI();
break;
case 2:
SomeActionClass(context).fetchYetAnotherAPI();
break;
}
这里我没有return语句但是API调用是根据满足的情况执行的。
之所以这么说,是因为 return
之后的每个 break
永远不会被实际执行。我的意思是,return
之后的任何代码都不会被执行,break
也不例外。您可以简单地删除中断,您的代码甚至不会注意到。 switch
将像以前一样运行,因为当它找到相关的 case
时,该函数将 return
并且不会评估其他情况。