Dart中的动态类方法调用

sam*_*ali 8 dart dart-mirrors

就像在PHP中的Dynamic类方法调用中的问题一样,我想在Dart中执行此操作.

var = "name";
page.${var} = value;
page.save();
Run Code Online (Sandbox Code Playgroud)

那可能吗?

Kai*_*ren 10

使用Mirrors可以实现几件事.

以下是如何设置类的值以及如何动态调用方法的示例:

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", []);
}
Run Code Online (Sandbox Code Playgroud)

如果你想知道,im是一个InstanceMirror,它基本上反映了page实例.

还有另一个问题:有没有办法动态调用方法或在Dart中的类中设置实例变量?

  • 有谁知道如何在 Flutter 中做到这一点?在 flutter 中我们无法导入 dart:mirros 包:/ (3认同)

Ale*_*uin 6

您可以使用Dart Mirror API来执行此类操作.镜像API现在还没有完全实现,但是它的工作方式如下:

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"
  });
}
Run Code Online (Sandbox Code Playgroud)