【问题标题】:How do i pass nested models objects to the parent in flutter如何在颤动中将嵌套模型对象传递给父级
【发布时间】:2021-01-11 18:20:47
【问题描述】:

我试图将值放入我的不同模型中,当我使用父模型的 toJson() 函数时,它假设用它们的对象调用其他模型并形成一个我可以发送到 firebase 的 json。

下面是模型

class Customer {
  String name;
  String avatar;
  String customerId;
  List<Receivers> receivers;

  Customer({this.name = 'my name', this.avatar ='image-link', this.customerId ='123455', this.receivers});

  Customer.fromJson(Map<String, dynamic> json) {
    name = json['name'];
    avatar = json['avatar'];
    customerId = json['customerId'];
    if (json['receivers'] != null) {
      receivers = new List<Receivers>();
      json['receivers'].forEach((v) {
        receivers.add(new Receivers.fromJson(v));
      });
    }
  }

  Map<String, dynamic> toJson() {
    print('i was called 1');
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['name'] = this.name;
    data['avatar'] = this.avatar;
    data['customerId'] = this.customerId;
    if (this.receivers != null) {
      print('i was called 2');
      data['receivers'] = this.receivers.map((v) => v.toJson()).toList();
    }
    return data;
  }
}

class Receivers {
  String adddress;
  String apartmentNumber;
  String apartmentType;
  DropoffCoordinates dropoffCoordinates;
  String name;
  int phoneNumber;

  Receivers(
      {this.adddress = 'worldwide',
      this.apartmentNumber = 'no1',
      this.apartmentType = 'flat',
      this.dropoffCoordinates,
      this.name = 'my name',
      this.phoneNumber = 89084884});

  Receivers.fromJson(Map<String, dynamic> json) {
    adddress = json['adddress'];
    apartmentNumber = json['apartmentNumber'];
    apartmentType = json['apartmentType'];
    dropoffCoordinates = json['dropoffCoordinates'] != null
        ? new DropoffCoordinates.fromJson(json['dropoffCoordinates'])
        : null;
    name = json['name'];
    phoneNumber = json['phoneNumber'];
  }

  Map<String, dynamic> toJson() {
    print('i was called 2');
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['adddress'] = this.adddress;
    data['apartmentNumber'] = this.apartmentNumber;
    data['apartmentType'] = this.apartmentType;
    if (this.dropoffCoordinates != null) {
      print('i was called 3');
      data['dropoffCoordinates'] = this.dropoffCoordinates.toJson();
    }
    data['name'] = this.name;
    data['phoneNumber'] = this.phoneNumber;
    return data;
  }
}

class DropoffCoordinates {
  double latitude;
  double longitude;

  DropoffCoordinates({this.latitude = 1.3566, this.longitude = 2.47655});

  DropoffCoordinates.fromJson(Map<String, dynamic> json) {
    latitude = json['latitude'];
    longitude = json['longitude'];
  }

  Map<String, dynamic> toJson() {
    print('i was called 4');
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['latitude'] = this.latitude;
    data['longitude'] = this.longitude;
    return data;
  }
}

我硬编码了这些值,只是为了查看被调用的各种 toJson() 函数的结果,但现在的问题是:

嵌套模型没有被调用或显示在 print toJson() 函数的结果中

下面是我从打印结果中得到的值

print('CUSTOMER MODEL: ${customerInstance.toJson()}');
print('RECEIVERS MODEL: ${receiversInstance.toJson()}');
print('DROPOFFPOINTS MODEL: ${dropoffCordinstance.toJson()}');

控制台结果

D/ViewRootImpl@4ab0077[MainActivity](21376): ViewPostIme pointer 0
D/ViewRootImpl@4ab0077[MainActivity](21376): ViewPostIme pointer 1
Reloaded 38 of 1370 libraries in 6,641ms.
I/flutter (21376): i was called 1
I/flutter (21376): CUSTOMER MODEL: {name: my name, avatar: image-link, customerId: 123455}
I/flutter (21376): i was called 2
I/flutter (21376): RECEIVERS MODEL: {adddress: worldwide, apartmentNumber: no1, apartmentType: flat, name: my name, phoneNumber: 89084884}
I/flutter (21376): i was called 4
I/flutter (21376): DROPOFFPOINTS MODEL: {latitude: 1.3566, longitude: 2.47655}

请帮忙,我只需要从嵌套模型获取值到客户模型,所以我可以使用它的 toJson() 函数以地图形式发送到 Firestore。

谢谢

【问题讨论】:

    标签: json flutter dart


    【解决方案1】:

    如果无法查看实例化 Customer 对象的代码,就很难理解哪里出了问题。你的模型分类也有一些错误。

    我的建议是:

    1. 生成完整的 JSON
    2. 生成使用quicktype.io分类的飞镖

    3。生成一个新的Customer 模型并填充所有子属性/对象 4. 一旦你有了完整的Customer 对象,使用toJson() 函数或你喜欢的方法打印它

    【讨论】:

    • 我只是按照你的要求做了,谢谢你的回复。这是文件app.quicktype.io?share=79d1qgHAOqk6RrjsNbl3的链接我想问一下,例如:我当前的纬度和经度被发送到DropoffCoordinates Model class对象,现在我填写了一个填充Receiver model class的表格。
    • 为什么如果我调用 Customer customerInstance; print('Customer Model: ${customerInstance.toJson()}); 它只带出模型中已经存在的对象,它不会调用嵌套模型的 toJson()。 I/flutter (21376):客户模型:{name:isaac,头像:image-link,customerId:123455}
    • 你试过用 quicktype.io 生成的 helper 吗? customerToJson(customerInstance)?
    猜你喜欢
    • 2021-04-26
    • 2018-09-17
    • 2017-08-23
    • 1970-01-01
    • 2020-10-15
    • 2021-04-25
    • 2021-10-18
    • 1970-01-01
    相关资源
    最近更新 更多