Flutter/Dart:子类冻结数据类

Mar*_*ula 10 dart flutter clean-architecture

我正在使用以下插件:https : //pub.dev/packages/freezed

我想子类化冻结的数据类以在我的数据层中提供附加功能。所以我有我的数据类,它看起来像:

import 'dart:ui';
import 'package:freezed_annotation/freezed_annotation.dart';
part 'card.freezed.dart';

@freezed
abstract class Card with _$Card {
  factory Card({String text, Color color, List<String> categories}) = _Card;
}
Run Code Online (Sandbox Code Playgroud)

现在我想将此 Card 类作为我的 CardModel 的超类,以便 CardModel 可以访问相同的字段、copyWith 方法、值相等......但我不知道如何去做。我正在尝试这样的事情:

import 'package:flutter/widgets.dart';
import 'package:growthdeck/features/card_deck/domain/entities/card.dart';

import '../../domain/entities/card.dart';

abstract class CardModel extends Card {
  factory CardModel.fromMap(Map<String, dynamic> card) => Card(
        text: card["text"],
        color: Color(int.parse(card['color'])),
        categories: card['categories'] as List<String>,
      );
}
Run Code Online (Sandbox Code Playgroud)

这会引发以下错误:

package:growthdeck/features/card_deck/data/models/card_model.dart 11:9  new CardModel.fromMap
test/features/card_deck/data/models/card_model_test.dart 13:23          main.<fn>

type '_$_Card' is not a subtype of type 'CardModel' in type cast
Run Code Online (Sandbox Code Playgroud)

有没有办法正确地做到这一点?我的解决方法是简单地将 Card 类“包装”在 CardModel 中,并提供一个不是很优雅的 toCard() 方法:S

Abd*_*kka 13

Freezed 目前不支持继承,因此建议使用组合而不是继承,正如创建者在这里提到的:

\n

https://github.com/rrousselGit/freezed/issues/464

\n

并在帖子的评论中。

\n