Как исключить поля в модели DART с использованием другого класса и JsonKey?

У меня есть модель, показанная ниже.

@JsonSerializable()
class Vehicle{
 final String name;
 final String make;
 final String model;
 final int year;
 final int tires;
 final int seats;

 Vehicle({
  this.name,
  this.make,
  this.model,
  this.year,
  this.tires,
  this.seats
 });

factory Vehicle.fromJson(Map<String, dynamic> json, int vehicleOwnerId) {
    var response = _$VehicleFromJson(json);

    response.vehicleOwnerId = vehicleOwnerId;

    return response;
  }

  Map<String, dynamic> toJson() => _$VehicleToJson(this);
}

В другой части приложения мне нужно отправить объект Vehicle и конечную точку API, как это.

Future<int> sendData({Vehicle vehicle}){
  final Response response = await put(
      Uri.https(apiEndpoint, {"auth": authKey}),
      headers: headers,
      body: vehicle);
  return response.statusCode;
}

Vehicle car;
// remove/exclude unwanted fields

Здесь мне нужно удалить / исключить дополнительные поля, такие как сиденья и шины, из объекта Car.

int responseCode = await sendData(vehicle: car);

Я использую пакет Json Serializable для обработки данных JSON, поэтому было бы здорово, если бы я мог использовать JsonKey (ignore: true) для исключения нежелательных полей из отдельного класса, расширяющего модель. Я не уверен, есть ли другой способ сделать это. Может ли кто-нибудь помочь мне в этой ситуации? Заранее спасибо!

См. также:  Dart: язык, лежащий в основе ОС Flutter и Fuchsia.
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 1
  1. SUPARNA SOMAN

    Я думаю, вам здесь не хватает дополнительного шага. Вы не сможете использовать модель дротика в качестве полезной нагрузки данных для HTTP-запросов. Вам нужно будет сопоставить его ключи в формате String, а затем jsonEncode карту.

    Вы можете сделать что-то подобное, чтобы исключить нежелательные поля из класса дротика.

    Vehicle car;
    
    int responseCode = await sendData(vehicle: car);
    
    Future<int> sendData({Vehicle vehicle}){
    
      Map<String dynamic> mappedVehicle = vehicle.toJson();
    
      vehicle.remove("tires");
      vehicle.remove("seats");
      // This will remove the fields 
    
      var finalVehicle = jsonEncode(mappedVehicle);
    
      final Response response = await put(
          Uri.https(apiEndpoint, {"auth": authKey}),
          headers: headers,
          body: finalVehicle);
      return response.statusCode;
    }
    

    Для получения дополнительных сведений: Перейдите по этой ссылке

    Я не уверен, что это лучший подход, но дайте мне знать, как это происходит.

    Эта работа как шарм! Спасибо, что указали мне недостающие части, цените это! person SUPARNA SOMAN; 03.02.2020

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: