How to inherit from a parent class with Freezed

Viewed 1920

I'm quite new to Flutter (and even more to the Freezed package...) So I hope that the question is relevant.

So, here is my usecase: a User can be Member of differents groups. A User class shares . I have issues to deal with this relationship with Freezed:

@freezed
abstract class User with _$User {
  const factory User({
    @required UniqueId id,
    Name firstname,
    Name lastname,
    @required EmailAddress email,
    @required bool emailVerified,
  }) = _User;
}

@freezed
abstract class Member extends User with _$Member { // Here is the issue
  const factory Member({
    @required UniqueId id,
    @required Name displayname,
    String photo,
    List roles,
    String status,
    DateTime expiration,
  }) = _Member;

_$Member.copyWith' ('$MemberCopyWith Function()') isn't a valid override of '_$User.copyWith' ('$UserCopyWith Function()').

What would be the right way to do so?

1 Answers

You'll have to use the Implements tag and make User a normal abstract class. But considering your scenario, I think it's best to do the following.

abstract class UserBase {
  UniqueId get id;
  Name get firstname;
  Name get lastname;
  EmailAddress get email;
  bool get emailVerified;
}

@freezed
abstract class User with _$User {
  @Implements(UserBase)
  const factory User({
    @required UniqueId id,
    Name firstname,
    Name lastname,
    @required EmailAddress email,
    @required bool emailVerified,
  }) = _User;
}

@freezed
abstract class Member with _$Member {
  @Implements(UserBase)
  const factory Member({
    @required UniqueId id,
    Name firstname,
    Name lastname,
    @required EmailAddress email,
    @required bool emailVerified,
    @required Name displayname,
    String photo,
    List roles,
    String status,
    DateTime expiration,
  }) = _Member;
}

Feel free to ask any queries.

Related