【问题标题】:Flutter - Iterate through object keys and valuesFlutter - 遍历对象键和值
【发布时间】:2019-05-06 20:46:42
【问题描述】:

我有一个反对意见,我想知道是否有一种简单的方法可以遍历它的键和值?

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

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

【问题讨论】:

    标签: dart flutter


    【解决方案1】:

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

    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);
      }
    }
    

    【讨论】:

      【解决方案2】:

      这几乎每天都困扰着我。这也是 Dart 的 web 端的一个问题。 在我看来,这是 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
          }); 
      }
      

      【讨论】:

        【解决方案3】:

        没有。

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

        如果你只是想为一个特定的班级做点什么,我只是手动 写: dart Map<String, dynamic> toJson() => {"id": id, "title": title, "article": article}; 然后在你想迭代时使用它。

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

          • 你在这里写的是 Set 字面量,而不是 Dart 中的对象
          猜你喜欢
          • 2017-08-30
          • 1970-01-01
          • 2011-08-03
          • 1970-01-01
          • 2014-08-09
          • 1970-01-01
          • 2018-07-15
          • 2017-12-28
          • 1970-01-01
          相关资源
          最近更新 更多