Basic reflection in Dart, with support for introspection and dynamic invocation.

Introspection is that subset of reflection by which a running program can examine its own structure. For example, a function that prints out the names of all the members of an arbitrary object.

Dynamic invocation refers the ability to evaluate code that has not been literally specified at compile time, such as calling a method whose name is provided as an argument (because it is looked up in a database, or provided interactively by the user).

How to interpret this library's documentation

As a rule, the names of Dart declarations are represented using instances of class Symbol. Whenever the doc speaks of an object s of class Symbol denoting a name, it means the string that was used to construct s.

The documentation frequently abuses notation with Dart pseudo-code such as o.x(a), where o and a are defined to be objects; what is actually meant in these cases is o'.x(a') where o' and a' are Dart variables bound to o and a respectively. Furthermore, o' and a' are assumed to be fresh variables (meaning that they are distinct from any other variables in the program).

Sometimes the documentation refers to serializable objects. An object is serializable across isolates if and only if it is an instance of num, bool, String, a list of objects that are serializable across isolates, or a map with keys and values that are all serializable across isolates.

Status: Unstable

The dart:mirrors library is unstable and its API might change slightly as a result of user feedback. This library is platform dependent and therefore it has implementations for both dart2js and the Dart VM. Both are under development and may not support all operations yet.


currentMirrorSystem() MirrorSystem

Returns a MirrorSystem for the current isolate.

reflect(Object reflectee) InstanceMirror

Reflects an instance.

reflectClass(Type key) ClassMirror

Reflects a class declaration.

reflectType(Type key, [ List<Type> typeArguments ]) TypeMirror

Reflects the type represented by key.



A ClassMirror reflects a Dart language class.


A ClosureMirror reflects a closure.


A mirror on a show/hide combinator declared on a library dependency.


Class used for encoding comments as metadata annotations.


A DeclarationMirror reflects some entity declared in a Dart program.


A FunctionTypeMirror represents the type of a function in the Dart language.


An InstanceMirror reflects an instance of a Dart language object.


An IsolateMirror reflects an isolate.


A mirror on an import or export declaration.


A LibraryMirror reflects a Dart language library, providing access to the variables, functions, and classes of the library.


A MethodMirror reflects a Dart language function, method, constructor, getter, or setter.


A Mirror reflects some Dart language entity.


Annotation describing how "dart:mirrors" is used (EXPERIMENTAL).


A MirrorSystem is the main interface used to reflect on a set of associated libraries.


An ObjectMirror is a common superinterface of InstanceMirror, ClassMirror, and LibraryMirror that represents their shared functionality.


A ParameterMirror reflects a Dart formal parameter declaration.


A SourceLocation describes the span of an entity in Dart source code.


A TypedefMirror represents a typedef in a Dart language program.


A TypeMirror reflects a Dart language class, typedef, function type or type variable.


A TypeVariableMirror represents a type parameter of a generic type.


A VariableMirror reflects a Dart language variable declaration.