Flutter Freezed, Unknown/Fallback union значение

Можно ли использовать конструктор FallBack / Unknown в замороженном состоянии?

Допустим, у меня есть такой союз:

      @Freezed(unionKey: 'type')
@freezed
abstract class Vehicle with _$Vehicle {
  const factory Vehicle() = Unknown;
  
  const factory Vehicle.car({int someVar}) = Car;
  const factory Vehicle.moto({int otherVar}) = Moto;

  factory Vehicle.fromJson(Map<String, dynamic> json) => _$VehicleFromJson(json);
}

И теперь я получаю JSON с новым «типом», например, «лодка».

Когда я вызываю Vehicle.fromJson, я получаю ошибку, потому что она попадет в «FallThroughError» переключателя.

Есть ли для этого какие-нибудь аннотации, например, для JsonKey?

      @JsonKey(name: 'type', unknownEnumValue: VehicleType.unknown)

Я знаю, что у нас есть конструктор «по умолчанию», но «тип» для него - «по умолчанию», поэтому «лодка» не будет в этом случае переключателя.

Спасибо

1 ответ

Вы можете использовать fallbackUnionатрибут, чтобы указать, какой конструктор/фабрику использовать в таком случае.

      
@Freezed(unionKey: 'type', fallbackUnion: "Unknown")
@freezed
abstract class Vehicle with _$Vehicle {
  const factory Vehicle() = Unknown;
  
  const factory Vehicle.car({int someVar}) = Car;
  const factory Vehicle.moto({int otherVar}) = Moto;

  // Name of factory must match what you specified, case sensitive
  // if you're using a custom 'unionKey', this factory can omit 
  // @FreezedUnionValue annotation if its dedicated for an unknown union.
  const factory Vehicle.Unknown(
    /*think params list need to be empty or must all be nullable/optional*/
  ) = _Unknown;

  factory Vehicle.fromJson(Map<String, dynamic> json) => _$VehicleFromJson(json);
}

Другие вопросы по тегам