Flutter / Dart Json Serialization

Oct 21 2020

Tôi mới sử dụng cả Flutter và Dart và đang cố gắng chuyển đổi một số ứng dụng studio android sang sử dụng Flutter nếu có thể. Tôi đang cố gắng phân tích cú pháp một số json đơn giản để tìm hiểu cách tất cả các tính năng phi tiêu / rung có thể giúp tôi.

Cấu trúc lớp mà tôi muốn viết là:

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

chuỗi json rất đơn giản

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

và:

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

khi tôi xem tệp Company.g.dart không có tham chiếu đến lớp mở rộng Salinas? Có cách nào để làm việc này không?

Tôi rõ ràng đang thiếu một cái gì đó.

Trả lời

1 Akif Oct 21 2020 at 03:03

Bạn cần xác định các thuộc tính lớp mở rộng trong hàm tạo con như sau:

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

Sau khi bạn sẽ thấy kết quả này:

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

Trên cơ sở JSON bạn đã cung cấp, bạn nên tạo một Mô hình như trên. Sau đó, bạn có thể lập bản đồ toàn bộ một cách khá tiện lợi,

Company company = Company.fromJson(response);

và sau đó bạn có thể tự do in

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