Flutter 在dart中运行自定义异常时,如何通过编译器解决错误?

Flutter 在dart中运行自定义异常时,如何通过编译器解决错误?,flutter,dart,exception,try-catch,Flutter,Dart,Exception,Try Catch,我编写了以下代码,以使用visual studio代码测试dart中的自定义异常。 (参考YouTube上的教程)我没有得到教程中所示的预期输出 void main(){ try { depositMoney(-200); } catch (e) { print(e.errorMessage()); } finally { print("FINALLY") } } class DepositE

我编写了以下代码,以使用visual studio代码测试dart中的自定义异常。
(参考YouTube上的教程)
我没有得到教程中所示的预期输出

void main(){

    try {
        depositMoney(-200);
    } catch (e) {
        print(e.errorMessage());
    } finally {
        print("FINALLY")
    }
}

class DepositException implements Exception {
  String errorMessage() {
    return "You cannot enter amount less than 0";
  }
}

void depositMoney(int amount) {
  if(amount < 0) {
    throw new DepositException();
  }
}
请帮我解决这个问题。
……
期望输出:

You cannot enter amount less than 0
FINALLY

我也试过。我在初始化catch块时提到了自定义异常类,从而解决了这个问题

请在下面查找代码片段:


void main(){

    try {
        depositMoney(-200);
    } on DepositException catch (e) {
        print(e.errorMessage());
    } finally {
        print("FINALLY");
    }
}

class DepositException implements Exception {
  String errorMessage() {
    return "You cannot enter amount less than 0";
  }
}

void depositMoney(int amount) {
  if(amount < 0) {
    throw new DepositException();
  }
}


void main(){
试一试{
存款(-200);
}关于异常捕获(e){
打印(如errorMessage());
}最后{
打印(“最终”);
}
}
类DepositorException实现异常{
字符串errorMessage(){
返回“不能输入小于0的金额”;
}
}
无效存款(整笔金额){
如果(金额<0){
抛出新的异常();
}
}

您应该使用“on”来限制catch,而不是检查正文中的类型:“on desposition exception catch(e)”。。。这样别人就不会误会了。谢谢你的建议。我不知道怎么走。我已经修改了密码。您还可以实现一个抽象类,该类扩展具有errorMessage的异常,然后为您想要的每个特定异常实现具体类,并“on MyBaseException catch(e)”提供一个遵循相同协议的异常类。

void main(){

    try {
        depositMoney(-200);
    } on DepositException catch (e) {
        print(e.errorMessage());
    } finally {
        print("FINALLY");
    }
}

class DepositException implements Exception {
  String errorMessage() {
    return "You cannot enter amount less than 0";
  }
}

void depositMoney(int amount) {
  if(amount < 0) {
    throw new DepositException();
  }
}