在DART动态类方法调用(Dynamic class method invocation in Da

2019-07-03 16:35发布

在类似的问题动态类方法调用在PHP我想这样做的飞镖。

var = "name";
page.${var} = value;
page.save();

那可能吗?

Answer 1:

有几件事情你可以实现镜像 。

下面是一个例子如何设置的类别值以及如何动态调用方法:

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", []);
}

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

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



Answer 2:

您可以使用飞镖镜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"
  });
}


Answer 3:

您可以使用序列化

例如:

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']}");
}


文章来源: Dynamic class method invocation in Dart