Flutter / Dart Json Serialization

Oct 21 2020

ฉันยังใหม่กับทั้ง Flutter และ Dart และพยายามแปลงแอปพลิเคชั่น android studio ให้ใช้ flutter ถ้าทำได้ ฉันกำลังพยายามแยกวิเคราะห์ json แบบง่ายๆเพื่อเรียนรู้ว่าคุณสมบัติโผ / กระพือทั้งหมดสามารถช่วยฉันได้อย่างไร

โครงสร้างชั้นเรียนที่ฉันต้องการเขียนคือ:

class Company extends Salinas {
  final String name;
  Company({this.name}) : super();

  factory Company.fromJson(Map<String, dynamic> json) => _$CompanyFromJson(json); Map<String, dynamic> toJson() => _$CompanyToJson(this);
}

class Salinas {
  final int id;
  Salinas({this.id});

  factory Salinas.fromJson(Map<String, dynamic> json) => _$SalinasFromJson(json); Map<String, dynamic> toJson() => _$SalinasToJson(this);
}

สตริง json นั้นเรียบง่าย

 {"id":1,"name":"Acme"}

และ:

 print(company.id)is null
 print(company.name) is Acme;

เมื่อฉันดูไฟล์ Company.g.dart ไม่มีการอ้างอิงถึงคลาสเสริม Salinas? มีวิธีทำไหม

ฉันขาดอะไรไปอย่างชัดเจน

คำตอบ

1 Akif Oct 21 2020 at 03:03

คุณต้องกำหนดคุณสมบัติของคลาสเพิ่มเติมในตัวสร้างลูกเช่นนี้:

  class Company extends Salinas {
     final String name;
     Company({id, this.name}) : super(id: id);
   }

หลังจากที่คุณจะเห็นผลลัพธ์นี้:

   print(company.id) is 1
   print(company.name) is Acme;
1 DarshShah Oct 21 2020 at 16:09
class Company {
  int id;
  String name;

  Company({this.id, this.name});

  Company.fromJson(Map<String, dynamic> json) {
    id = json['id'];
    name = json['name'];
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['id'] = this.id;
    data['name'] = this.name;
    return data;
  }
}

บนพื้นฐานของ JSON ที่คุณให้ไว้คุณควรสร้าง Model ตามด้านบน หลังจากนั้นคุณสามารถทำแผนที่ทั้งหมดได้อย่างสะดวก

Company company = Company.fromJson(response);

จากนั้นคุณมีอิสระที่จะพิมพ์

print(company.id);
print(company.name);