所以我更新了 Flutter SDK 并且我的 swtich case 函式的作業方式相同,但現在break;每個 case 之后都被視為死代碼。我想知道這是為什么?我嘗試洗掉該return陳述句,但是當達到正確的引數時,UI 不會切換/更改。代碼:
更新前的舊 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",
);
}
如果我洗掉了return新更新的 switch 案例中的陳述句,那么問題是 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;
}
這里我沒有回傳陳述句,但 API 呼叫是根據遇到的情況執行的。
uj5u.com熱心網友回復:
之所以這么說,是因為break之后的每一個return都不會被實際執行。我的意思是,a 之后的任何代碼return都不會被執行,break也不例外。您可以簡單地洗掉中斷,您的代碼甚至不會注意到。will的switch行為與以前一樣,因為當它找到相關的 時,將不會評估case該函式和其他情況。return
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/431301.html
下一篇:FlutterNull安全問題
