2012-11-08 25 views

cevap

8

Eğer Mirrors ile elde edebilirsiniz birkaç şey vardır. merak

import 'dart:mirrors'; 

class Page { 
    var name; 

    method() { 
    print('called!'); 
    } 
} 

void main() { 
    var page = new Page(); 

    var im = reflect(page); 

    // Set values. 
    im.setField("name", "some value").then((temp) => print(page.name)); 

    // Call methods. 
    im.invoke("method", []); 
} 

durumda, im temelde page örneğini yansıtan bir InstanceMirror şöyledir:

İşte sınıfların değerleri ayarlamak için ve nasıl dinamik yöntemleri çağırmak için nasıl bir örnek. Is there a way to dynamically call a method or set an instance variable in a class in Dart?

6

Böyle bir şey yapmak için Dart Mirror API'u kullanabilirsiniz. Ayna API tam şimdi hayata ama burada işe yarayabilir nasıl değildir:

import 'dart:mirrors'; 

class Page { 
    String name; 
} 

main() { 
    final page = new Page(); 
    var value = "value"; 

    InstanceMirror im = reflect(page); 
    im.setField("name", value).then((_){ 
    print(page.name); // display "value" 
    }); 
} 
+1

'Futures.wait()' çağrısına burada biraz anlam ifade etmiyor. Bunu atlayabilir ve sonuç aynıdır. Futures.wait(), verilen eylemler tamamlandığında tamamlanan bir 'Gelecek 'i döndürür; bu nedenle, düzgün çalışması için gerçekten bir' .then() 'yazmanız gerekir. Tabii ki şimdi operasyonlar async olmadığı için şans eseri çalışıyor :) –

+0

Yorumunuz için teşekkürler. Gelecek kullanımında yeniyim ve 'beklemek' önerisiyle karıştırdım www.dartbug.com/104 –

0

Sen Örneğin Serializable

kullanabilirsiniz::

import 'package:serializable/serializable.dart'; 

@serializable 
class Page extends _$PageSerializable { 
    String name; 
} 

main() { 
    final page = new Page(); 
    var attribute = "name"; 
    var value = "value"; 

    page["name"] = value; 
    page[attribute] = value; 

    print("page.name: ${page['name']}"); 
}