Согласно официальным документам для вызова нереализованного метода, вы должны удовлетворить один из следующих пунктов:
- Получатель имеет статический тип динамический.
- Получатель имеет статический тип, который определяет не реализованный метод (аннотация в порядке), а динамический тип получателя имеет реализацию noSuchMethod (), которая отличается от реализации в классе Object.
Пример 1: Уточняет первую точку
class Person {
@override //overring noSuchMethod
noSuchMethod(Invocation invocation) => 'Got the ${invocation.memberName} with arguments ${invocation.positionalArguments}';
}
main(List<String> args) {
dynamic person = new Person(); // person is declared dynamic hence staifies the first point
print(person.missing('20','shubham')); //We are calling an unimplemented method called 'missing'
}
Пример 2: Устанавливает первую точку
class Person {
missing(int age,String name);
@override //overriding noSuchMethod
noSuchMethod(Invocation invocation) => 'Got the ${invocation.memberName} with arguments ${invocation.positionalArguments}';
}
main(List<String> args) {
dynamic person = new Person(); //person could be var, Person or dynamic
print(person.missing(20,'shubham')); //calling abstract method
}