【问题标题】:Flutter Dart - dynamically get a property of a classFlutter Dart - 动态获取类的属性
【发布时间】: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

}

【问题讨论】:

    标签: class flutter dart parameter-passing


    【解决方案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】:

      一个快速的解决方法是,

      1. 将您的类转换为 JSON。
      2. 通过 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;
        }
      }
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-05-27
        • 2023-01-31
        • 1970-01-01
        • 1970-01-01
        • 2017-01-15
        • 1970-01-01
        • 2013-01-04
        • 2011-09-01
        相关资源
        最近更新 更多