Home > Mobile >  Flutter JSON Annotation getting an error on DateTime using JSON Key - null check operator used on a
Flutter JSON Annotation getting an error on DateTime using JSON Key - null check operator used on a

Time:03-01

I'm using the JSON Annotation Flutter package and I'm getting the following error 'null check operator used on a null value' when I try to set a timestamp in my user model what I don't understand the timestamp can be null as I don't always set it.

Here is my user model:

@JsonSerializable(explicitToJson: true)
class UserModel {
  String userId;
  String email;
  String firstName;
  String lastName;
  @JsonKey(fromJson: dateTimeFromTimestamp, toJson: dateTimeAsIs)
  DateTime? recentTraining;
  @DocumentSerializerNullable()
  DocumentReference? recentTrainingRef;
  int? dogsCount;
  int? totalTrainingSessions;
  int? totalTrainingTime; // in min
  int? totalTrainingDays;
  @JsonKey(fromJson: dateTimeFromTimestamp, toJson: dateTimeAsIs)
  DateTime? createdAt;

  UserModel({
    required this.userId,
    required this.email,
    required this.firstName,
    required this.lastName,
    this.recentTraining,
    this.recentTrainingRef,
    this.dogsCount,
    this.totalTrainingSessions,
    this.totalTrainingTime,
    this.totalTrainingDays,
    this.createdAt,
  });

  factory UserModel.fromJson(Map<String, dynamic> json) =>
      _$UserModelFromJson(json);

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

My dateTimeAsIs code:

Timestamp? dateTimeAsIs(DateTime? dateTime) {
  return Timestamp.fromDate(dateTime!);
}

DateTime dateTimeFromTimestamp(Timestamp timestamp) {
  return DateTime.parse(timestamp.toDate().toString());
}

Calling everything:

// User Model
  final UserModel userModelObject = UserModel(
    email: email,
    firstName: firstName,
    lastName: lastName,
    userId: authResult.user!.uid,
  );

  // Calls the dog Firebase service
  await UsersFirestoreService().createUser(userModelObject);

Firestore:

// Creates the user doc and sets the data
  Future<dynamic> createUser(UserModel user) async {
    try {
      return await usersCollection
          .doc(user.userId)
          .set(user.toJson()); // user.toJson() //{'firstName': user.firstName}
    } on FirebaseException catch (error) {
      throw CustomException(
        message: 'Future Error createUser',
        subMessage: error.message.toString(),
      );
    }
  }

CodePudding user response:

Timestamp? dateTimeAsIs(DateTime? dateTime) {
  return dateTime == null ? null : Timestamp.fromDate(dateTime);
}

You allow that method to pass in null, but explicitly return off it. You have to pass a DateTime.now() or whatever time you need to pass into dateTimeAsIs.

  • Related