Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 如何使用工厂构造函数创建对象?_Json_List_Dictionary_Flutter - Fatal编程技术网

Json 如何使用工厂构造函数创建对象?

Json 如何使用工厂构造函数创建对象?,json,list,dictionary,flutter,Json,List,Dictionary,Flutter,我已经使用转换了json数据,结果如下 import 'dart:convert'; LoginRespon loginResponFromJson(String str) => LoginRespon.fromJson(json.decode(str)); String loginResponToJson(LoginRespon data) => json.encode(data.toJson()); class LoginRespon { String status

我已经使用转换了json数据,结果如下

import 'dart:convert';

LoginRespon loginResponFromJson(String str) => LoginRespon.fromJson(json.decode(str));

String loginResponToJson(LoginRespon data) => json.encode(data.toJson());

class LoginRespon {
    String status;
    Data data;

    LoginRespon({
        this.status,
        this.data,
    });

    factory LoginRespon.fromJson(Map<String, dynamic> json) => LoginRespon(
        status: json["status"],
        data: Data.fromJson(json["data"]),
    );

    Map<String, dynamic> toJson() => {
        "status": status,
        "data": data.toJson(),
    };
}

class Data {
    String resource;
    String unit;
    Data({
        this.resource,
        this.unit,
    });

    factory Data.fromJson(Map<String, dynamic> json) => Data(
        resource: json["resource"],
        unit: json["unit"],
    );

    Map<String, dynamic> toJson() => {
        "resource": resource,
        "unit": unit,
    };
}
我想使用
LoginRespon
model来定义json数据中的每个值。。。我正在这样做

List<LoginRespon> mydata = [];
Map<String, dynamic> res = json.decode(response.body);
mydata.add(LoginRespon(
              status: res['status'],
              pesan: res['pesan'],
              resources:...?
              unit:...?
              ));

List mydata=[];
Map res=json.decode(response.body);
mydata.add(LoginRespon)(
状态:res['status'],
比桑:res['pesan'],
资源:。。。?
单位:。。。?
));

通过使用该代码,我不知道如何在
res[data]
内部调用
resources
unit
。。。是否有方法调用
资源
单元的值
,因为它们位于对象内部的对象中?

如果为LoginRespon类创建了工厂构造函数,那么为什么要传递这些命名参数

您可以直接使用工厂构造函数并传递解码响应。例如下:

Map<String, dynamic> res = json.decode(response.body);
mydata.add(
   LoginRespon.fromJson(res);
);
Map res=json.decode(response.body);
mydata.add(
LoginRespon.fromJson(res);
);
工厂将负责向变量传递正确的值,正如您在LoginRespon类的.fromJson方法中声明的那样


如果没有设置factory构造函数,则必须按照在本代码示例中创建的方式创建LoginRespon对象,即通过将值传递给命名参数,这将起作用,但即使这样,您也无法将值传递给变量
resource
unit
,因为它们在类声明中不存在,您必须传递
数据
对象(分别包含
资源
单元
的值)。

您可以将其嵌套

res['data']['resource']

mydata.add(LoginRespon(
          status: res['status'],
          pesan: res['pesan'],
          resources:res['data']['resource']
          unit:res['data']['unit']
          ));

我已经试过了,但我得到的错误是,
命名参数“resources”没有定义。
还有其他方法吗,因为
resources
在object的对象内好的,我刚刚查看了你的LoginRespon类,它甚至没有名为resource和unit的字段,它有一个数据字段,因此,要么更改该实例变量,要么将数据对象传递给它,而不是资源和单元!对资源和单元位于
数据的类中
。。。。有什么我应该添加的吗?我通过传递一个
数据
对象来尝试它,该对象包含资源和单位的值。。。非常感谢您的解释和解决方案我已经试过了。。。但参数
resources
始终未定义。。因为资源和单元在
数据的类中,所以在您有任何具有资源名称的参数之前,它将是未定义的。
res['data']['resource']

mydata.add(LoginRespon(
          status: res['status'],
          pesan: res['pesan'],
          resources:res['data']['resource']
          unit:res['data']['unit']
          ));