将 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 并且不会评估其他情况。