【问题标题】:Map to Class in Dart映射到 Dart 中的类
【发布时间】:2018-05-11 10:43:25
【问题描述】:

有没有一种标准方法可以将地图转换为用户定义类的对象?

在 Python 中,您可以执行 MyClass(**map),它基本上将映射展开为类构造函数的命名参数。

任何指针/帮助将不胜感激。

【问题讨论】:

    标签: dart flutter


    【解决方案1】:

    您也可以通过使用named constructor 手动实现这一点,例如这个简单的示例:

    import 'package:flutter/material.dart';
    
    Map myMap = {"Users": [
    
      {"Name": "Mark", "Email": "mark@email"},
    
    
      {"Name": "Rick", "Email": "rick@email"},
    ]
    };
    
    class MyData {
      String name;
      String email;
    
      MyData.fromJson(Map json){
        this.name = json["Name"];
        this.email = json ["Email"];
      }
    }
    
    class UserList extends StatelessWidget {
      MyData data;
    
      @override
      Widget build(BuildContext context) {
        return new Scaffold(
            appBar: new AppBar(title: new Text("User List"),),
            body:
            new ListView.builder(
                shrinkWrap: true,
                itemCount: myMap["Users"].length,
                itemBuilder: (BuildContext context, int index) {
                  data = new MyData.fromJson(myMap["Users"][index]);
                  return new Text("${data.name} ${data.email}");
                })
        );
      }
    }
    

    【讨论】:

      【解决方案2】:

      没有内置方法。
      您可以使用其中一种序列化包,例如

      【讨论】:

        【解决方案3】:

        使用这种方法,调用代码可以具有类型安全性、streetcity 字段的自动完成以及编译时异常。如果您打错字或将字段视为ints 而不是Strings,则应用将无法编译,而不是在运行时崩溃。

        Address.fromJson() 构造函数,用于从映射结构构造新的用户实例。

        toJson() 方法,将 User 实例转换为地图。

        class Address {
          String street;
          String city;
        
          Address(this.street, this.city);
        
          Address.fromJson(Map<String, dynamic> json)
              : street = json['street'],
                city = json['city'];
        
          Map<String, dynamic> toJson() =>
              {
                'citstreety': street,
                'city': city,
              };
        }
        
        
        List<Address>  getAddressList(){
        
          Map myMap = {"address": [
            {"street": "Marine Lines", "city": "Mumbai"},
            {"street": "Main Road", "city": "Delhi"},
          ]
          };
        
          var data = myMap["address"];
          List<Address> addressModelList = [];
          for (var u in data) {
            Address address =
            Address.fromJson(u);
            addressModelList.add(address);
          }
          return addressModelList;
        }
        

        【讨论】:

          【解决方案4】:

          You can use Function.apply。我做了一个gist 来测试它的链接答案

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2022-01-16
            • 1970-01-01
            • 1970-01-01
            • 2021-09-22
            • 2020-07-14
            • 2016-01-15
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多