Getting warning while trying to use noSuchMethod().
The method missing isn't defined for the class Person.
But according to the docs and other examples, whenever we call a non-existing member then, noSuchMethod() should be called. Whose default behavior is to throw noSuchMethodError.
void main() {
var person = new Person();
print(person.missing("20", "Shubham")); // is a missing method!
}
class Person {
@override
noSuchMethod(Invocation msg) => "got ${msg.memberName} "
"with arguments ${msg.positionalArguments}";
}
According to the official docs for invoking an unimplemented method, you have to satisfy one of the following points:
Example 1 : Satifies Point First
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'
}
Example 2 : Satifies Point Second
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
}
Informal language specification: https://github.com/dart-lang/sdk/blob/master/docs/language/informal/nosuchmethod-forwarding.md
tl;dr, you can only call methods that aren't implemented if:
The caller is of type dynamic The caller's super-types have that method that defined (even abstractly) Concretely, the following is no longer valid in Dart 2:
@proxy class A { noSuchMethod(_) => 'Hello'; } main() { // Static analysis error, will refuse to build. print(new A().sayHello()); }
Refers to matanlurey explanation.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.