Flutter-遍历对象键和值

时间:2018-12-05 10:02:56

标签: dart flutter

我有和对象,我想知道是否有一种简单的方法来迭代它的键和值?

class Post {
  String id;
  String title;
  String article;

  Post(
      {
        this.id,
        this.title,
        this.article
      }
      );
}

4 个答案:

答案 0 :(得分:3)

没有。

您要的是反思。如果该库在您的平台上可用(它不在Flutter中),则可以为此使用(*x).f API。 您可能可以使用package:reflectable为其生成代码。 或者,您可以使用package:json_serializable从对象生成dart:mirrors

如果您只是想为一个特定的班级做些事情,我会手动进行 写: Map 然后在需要迭代时使用它。

答案 1 :(得分:1)

这几乎每天困扰我。在Dart的网络方面,这也是一个问题。 我认为这是Dart的主要缺点之一。

但是-这是我的解决方案。我正在为这些“可序列化”类使用接口类。

abstract class JsonTO {
    Map<String, dynamic> toJson();
}

class Device implements JsonTO {
    Map<String, dynamic> toJson() {
        return ... Your serialization thing
    }  
}

main() {
    final device = Device();
    final json = device.toJson();

    json.forEach((final String key, final value) {
        _logger.info("Key: {{$key}} -> value: ${value}");
        // do with this info whatever you want
    }); 
}

答案 2 :(得分:0)

所有要做的就是命名具有所有属性的对象,例如

var object = { this.id,
        this.title,
        this.article   }
for (var property in object) {
    if (object.hasOwnProperty(property)) {
        // do stuff
    }
}

答案 3 :(得分:0)

你也可以使用吸气剂?它将要求您一次设置所有字段,但之后,您可以调用完整的字段列表并对其进行迭代。

class Person{
  final String _firstName;
  final String _secondName;
  Person(this._firstName,this._secondName);

  String get hisName{
    return _firstName;
  }
}


class Player extends Person{

  final int _shirtNumber;

  Player(String _firstName,String _secondName,this._shirtNumber) : super(_firstName, _secondName);

  List get everything{
    final stuff=[_firstName,_secondName,_shirtNumber];

    return stuff;
  }
}


void main(List<String> arguments) {

  final foo = Player('David','Beckham',7);

  print(foo.everything);
  
  for (final blah in foo.everything){
    print(blah);
  }
}