Исключение захвата — это получение ошибки в flutter. Тип аргумента «Объект» не может быть присвоен типу параметра «Исключение»

#flutter #flutter-dependencies

Вопрос:

Я новичок в flutter. Версия Flutter 2.5.0

У меня есть класс с именем SubmissionFailed.

 class SubmissionFailed extends FormSubmissionStatus {
  final Exception exception;

  SubmissionFailed(this.exception);
}
 

Когда я пытаюсь вызвать этот класс в блоке try/catch, он выдает ошибку.

Ошибка : Тип аргумента «Объект» не может быть присвоен типу параметра «Исключение»

Вот блок try/catch:

введите описание изображения здесь

Я не понимаю, в чем дело?

Ответ №1:

Это связано с тем, что аргумент exception не имеет типа в объявлении блока catch, поэтому Flutter сохраняет его в безопасности, считая его объектом типа. Почему? Как и в Java, если расширенный класс не определен, все классы в Dart автоматически расширяют объект класса. В принципе, каждый отдельный класс в Dart наследуется (прямо или косвенно) от объекта.

У SubmissionFailed конструктора есть один параметр типа Exception , что означает, что вы не можете передать ни один Object или любой другой тип, он должен быть Exception типом.

Чтобы исправить это, просто отлейте его так:

 try {
  // code
} catch (exception) {
  yield state.copyWith(formStatus: SubmissionFailed(exception as Exception));
}
 

Комментарии:

1. Не беспокойтесь, рад, что смог помочь!

2. Было бы гораздо лучше зафиксировать catch блок, чтобы быть on Exception catch (exception) , и избежать броска. В противном случае, если будет брошено что-то другое (например, an Error ), оно не будет омрачено последующим CastError .

Ответ №2:

Вы можете разыграть свой объект as Exception для его использования