dartdart-mirrors

Passing a class type as a variable in Dart


It is possible to pass a class type as a variable in Dart ?

I am trying to do something as follows:

class Dodo
{
  void hello() {
    print("hello dodo");
  }
}

void main() {

var a = Dodo;
var b = new a();
b.hello();

}

in python similar code would work just fine. In Dart I get an error at new a() complaining that a is not a type.

Is is possible to use class objects as variables ? If not, what is the recommended work around ?


Solution

  • You can use the mirrors api:

    import 'dart:mirrors';
    
    class Dodo {
      void hello() {
        print("hello dodo");
      }
    }
    
    void main() {
      var dodo = reflectClass(Dodo);
    
      var b = dodo.newInstance(new Symbol(''), []).reflectee;
      b.hello();
    }
    

    Maybe it can be written more compact, especially the new Symbol('') expression.