Dynamically Add Method to Objects in Dart
Use noSuchMethod()
@proxy
class Widget {
final methods = <Symbol, Function>{};
noSuchMethod(Invocation i) {
if (i.isMethod && methods.containsKey(i.memberName)) {
return Function.apply(methods[i.memberName],
i.positionalArguments, i.namedArguments);
}
return super.noSuchMethod(i);
}
}
Create Widget
instance and assign a function to methods
mapping with a custom name, i.e. welcome
var widget = Widget();
widget.methods[#welcome] = () => print('Hello, Dart');
Invoke the welcome
method on the Widget
instance as you'd have done with regular methods
widget.welcome()