firestoreodm-flutter
firestoreodm-flutter copied to clipboard
[cloud_firestore_odm] Either don't generate code for fields passed in super call or generate code for PerFieldToJson
Minimal reproducible code
import 'package:cloud_firestore_odm/cloud_firestore_odm.dart';
import 'package:json_annotation/json_annotation.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
part 'human.g.dart';
enum Gender {
male,
female,
other,
}
class Human {
Human({
required this.id,
required this.gender,
});
final int id;
final Gender gender;
}
@JsonSerializable(createPerFieldToJson: true, createFieldMap: true)
class Male extends Human {
Male({
required super.id,
required this.i,
}) : super(gender: Gender.male);
final int i;
}
@Collection<Male>('male')
final maleColRef = MaleCollectionReference();
- Run the builder
dart run build_runner build -d
. - The generated code will have
whereGender
,orderByGender
and otherGender
related things, like_$MalePerFieldToJson.gender(...)
but the_$MalePerFieldToJson
class doesn't havegender
getter in it.
Possible fixes:
- As
toJson
andfromJson
are only generated forid
andi
fields and not thegender
field. Thecloud_firestore_odm
should also not generate anything forgender
.
// `gender` is not generated.
Male _$MaleFromJson(Map<String, dynamic> json) => Male(
id: (json['id'] as num).toInt(),
i: (json['i'] as num).toInt(),
);
// `gender` is not generated
Map<String, dynamic> _$MaleToJson(Male instance) => <String, dynamic>{
'id': instance.id,
'i': instance.i,
};
- Or, the generated class
_$MalePerFieldToJson
should also include thegender
property.
// ignore: unused_element
abstract class _$MalePerFieldToJson {
// ignore: unused_element
static Object? id(int instance) => instance;
// ignore: unused_element
static Object? i(int instance) => instance;
--> // Generate the following:
static Object? gender(Gender instance) => ...;
}
Specifications
- Version:
build_runner: 2.4.11
json_annotation: 4.9.0
json_serializable: 6.8.0
cloud_firestore_odm: 1.0.0-dev.87
cloud_firestore_odm_generator: 1.0.0-dev.88
- Platform: iOS & Android