switch case 表达式类型 'Type' 必须是 switch 表达式类型 'BankEvent' 的子类型

The switch case expression type 'Type' must be a subtype of the switch expression type 'BankEvent'

当我尝试在 dart 中使用 switch case 时出现此错误。我有一个摘要 class 和两个 class 扩展它。见下方代码

abstract class BankEvent{}

class FetchBanks extends BankEvent{}

class DeleteBank extends BankEvent{
  final int bankId;
  DeleteBank(this.bankId);
}

我必须在 handleEvents 方法中进行一些实现,这取决于我作为参数接收的 class 实例。但是我在 switch case 的 case 语句中得到了错误(The switch case expression type 'Type' must be a subtype of switch expression type 'BankEvent')。我的 switch case 实现代码如下

handleEvents(BankEvent bankEvent){
    switch(bankEvent){
      case FetchBanks:
        break;
    }
  }

为什么不直接将 switch 更改为 if 语句,如下所示:

handleEvents(BankEvent bankEvent){ 
   if(bankEvent is FetchBank){
      // FetchBank stuff
   }else if(bankEvent is DeleteBank){
      // DeleteBank stuff
   }
}

这行得通而且可读性很强。此外,您可以摆脱 switch 方法。

是啊,我终于找到答案了 research.It 应该写成下面的样子

handleEvents(BankEvent bankEvent){
    switch(bankEvent.runtimeType){
      case FetchBanks:
        break;
    }
  }