跳到主要内容

Dart - 动态获取类的属性的方法

管

管理员

flutter

2022年09月21日 2,636 次阅读
本页目录
dart并不像js一样可以很方便的通便变量获取对象属性

js 有两种方式获取对象的属性

    点语法, 例如 person.name
    中括号语法, 例如 person ['name']

其中, 第一种不能使用变量, 而第二种可以使用变量
 

 let person = {
    name: 'wj',
    age: 20
  }

  // 点表示法
  // 这里不能使用变量作为对象的属性名
  console.log(person.name);

  // 中括号表示法
  // 这里可以传入变量作为对象的属性名
  let name = 'name';
  console.log(person[name]);


我想通过传递一个字符串名称来获取一个类的属性。比如:
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 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
}

Related

相关文章

同分类文章 →
2026年10月31日 flutter

`auth()->id()` 到底返回谁?Sanctum 多态令牌与双会员系统的踩坑记录

## 引子先看一段看起来很正常的代码:```php$userId = auth('sanctum')-&gt;id();if ($userId) {    $res['isLiked'] = $this-&gt;likes()        -&gt;where('user_id', $userId

2026年07月28日 flutter

Dart 3 记录(Records)和密封类(Sealed classes)

Dart 3 引入了几个极其强大的语言特性,其中最耀眼、对我们日常开发改变最大的就是 记录(Records) 和 密封类(Sealed classes),它们配合 模式匹配(Pattern Matching),让 Dart 的表现力达到了现代编程语言(如 Swift、Kotlin、Rust

2026年06月29日 flutter

flutter的 Clean Architecture架构设计

Clean Architecture(清晰架构)是一种将应用程序分层的设计模式,强调关注点分离与依赖规则,通过将业务逻辑与框架、UI、数据源解耦,提升代码的可测试性、可维护性与可扩展性。在 Flutter/Dart 环境下,Clean Architecture 通

WeChat

扫码加我微信

微信二维码