Flutter Dart - 动态获取类的属性

Posted

技术标签:

【中文标题】Flutter Dart - 动态获取类的属性【英文标题】:Flutter Dart - dynamically get a property of a class 【发布时间】:2020-07-06 07:11:01 【问题描述】:

我想通过传递一个字符串名称来获取一个类的属性。我该怎么做?

class A 
  String fName ='Hello';


main() 
A a = A();
String var1='fName'; // name of property of A class

print (a.fName); // it is working fine

print (a.$var1); // it is giving error that no getter in A class. but I want to pass var1 and automatically get the associate property


【问题讨论】:

【参考方案1】:

在 Suman 的回答中,我建议公开一种方法,将对象转换为地图并检索属性(如果存在)。

例如:


class Person 
  String name;
  int age;

  Person(this.age, this.name);

  Map<String, dynamic> _toMap() 
    return 
      'name': name,
      'age': age,
    ;
  

  dynamic get(String propertyName) 
    var _mapRep = _toMap();
    if (_mapRep.containsKey(propertyName)) 
      return _mapRep[propertyName];
    
    throw ArgumentError('propery not found');
  


main() 
  Person person = Person(age: 10, name: 'Bob');

  print(person.name); // 'Bob'

  print(person.get('name')); // 'Bob'
  print(person.get('age')); // 10

  // wrong property name
  print(person.get('wrong')); // throws error



【讨论】:

【参考方案2】:

一个快速的解决方法是,

    将您的类转换为 JSON。 通过 json[key] 访问属性。
void main() 
  String var1='name';
  String var2='age';
  Info info= Info(name:"Suman", age:4);
  final json=info.toJson();
  print("NAME = $json[var1]");
  print("AGE = $json[var2]");


class Info 
  String name;
  int age;

  Info(this.name, this.age);

  Info.fromJson(Map<String, dynamic> json) 
    name = json['name'];
    age = json['age'];
  

  Map<String, dynamic> toJson() 
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['name'] = this.name;
    data['age'] = this.age;
    return data;
  

希望这会有所帮助。干杯。

【讨论】:

以上是关于Flutter Dart - 动态获取类的属性的主要内容,如果未能解决你的问题,请参考以下文章

Flutter Dart:如何更改类列表中类属性的值

在 List 中创建 List 的第一个元素 - Flutter、Dart

Flutter学习-dart:dart类和对象

Flutter/Dart JSON 和现有库类的序列化

flutter与native交互

flutter_bloc 4.0.0如何获取事件属性参数。