Search code examples
proxydelegatesdartdart-mirrorsnosuchmethod

How to use dart to implement a delegate/proxy?


I have two classes Parser and Proxy, and when I invoke a method from Parser, which does not exist, it will delegate it to Proxy class.

My code:

class Parser {
    noSuchMethod(Invocation invocation) {
        // how to pass the `invocation` to `Proxy`???
    }
}

class Proxy {
    static String hello() { return "hello"; }
    static String world() { return "world"; }
}

That when I write:

var parser = new Parser();
print(parser.hello());

It will print:

hello

Solution

  • You have to use dart:mirrors. Here's how to do :

    import 'dart:mirrors';
    
    class Parser {
      noSuchMethod(Invocation invocation) {
        ClassMirror cm = reflectClass(Proxy);
        return cm.invoke(invocation.memberName
            , invocation.positionalArguments
            /*, invocation.namedArguments*/ // not implemented yet
            ).reflectee;
      }
    }
    
    class Proxy {
      static String hello() { return "hello"; }
      static String world() { return "world"; }
    }
    
    main(){
      var parser = new Parser();
      print(parser.hello());
      print(parser.world());
    }