#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)
, и избежать броска. В противном случае, если будет брошено что-то другое (например, anError
), оно не будет омрачено последующимCastError
.
Ответ №2:
Вы можете разыграть свой объект as Exception
для его использования