dart - 如何在没有 Dart 的情况下指向 Dart 中的字段 :mirrors?

标签 dart flutter

我有模型

class Model {
  int counter;
}

现在我在运行时得到一个模型对象,所以我将它标记为动态的。

dynamic model = new Model();

int counter = 3;

什么是可能的方式做等同于

 model['counter'] = counter;

需要提及的是模型中的计数器在应用中的某处使用,因此 tree shaking 不会将其删除。

我正在寻找任何解决方案。

class Model {
  int counter;

  var counterPath = "any way to reference counter field, so I can give the value to it";

}

对任何建议或黑客开放 :)

最佳答案

一种方法是实现字符串名称和实际字段之间的映射

class Model {
  int counter;

  // reading: print(model['counter']);
  operator [](String name) {
    switch(name) {
      case 'counter':
        return counter;
      default: throw 'Field $name doesn't exist' in $runtimeType'; 
  }

  // writing: model['counter'] = counter;
  operator []=(String name, dynamic value) {
    switch(name) {
      case 'counter':
        counter = value;
        break;
      default: throw 'Field $name doesn't exist' in $runtimeType'; 
  }
}

关于dart - 如何在没有 Dart 的情况下指向 Dart 中的字段 :mirrors?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49115157/

相关文章:

dart - 如何将变量传递到Dart中的另一个页面?

android - 从 Flutter Dart 中的 MainActivity.java 读取变量

flutter - Provider中的监听器如何在Flutter中工作?

FirebaseAuth : getGoogleApiForMethod() returned Gms: com. google.firebase.auth.api.internal.zzal@489

flutter - 模态底片和 block

flutter - flutter 中的自定义卡布局

python - 如何通过抖动控制Rpi的GPIO引脚?

flutter - 使用 onTap (Inkwell) 打开/预览卡片

flutter - 在ListTile中的字幕内实现if语句

dart - 基于IP访问Httphandlers