我正在使用以下插件: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;
}

现在我想把这个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>,
      );
}

这会引发以下错误:

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

有没有办法把这件事做好呢?我的解决方法是简单地将Card类"包装"在CardModel中,并提供一个不太优雅的toCard()方法:s

推荐答案

Freeized目前不支持继承,所以建议使用组合,而不是创建者在这里提到的继承:

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

并在帖子的 comments 中.

Dart相关问答推荐

我不明白在DART的`if()`语句中使用`case

如何在将构造函数参数赋给最终变量和传递给超级构造函数之前操作它?

观察对象的状态

Dart 列表中的 addAll() 和 followBy() 有什么区别?

Flutter - 对 Cloud Firestore 进行排序

在Flutter中在 initstate() 之前调用了dependOnInheritedElement()

Flutter - 删除元素时 UI 未正确更新

GPS是否激活

为什么Dart中的 abs() 函数在没有用括号括起来时返回负数?

Flutter - 在 null 上调用了 getter 'length'

Dart/Flutter判断值是否为整数

如何go 除字符串中的变音符号?

如何使用 StreamBuilder 更新 TextField 的值?

dart的Completer和Future?

可以在 Dart 中的抽象类中声明静态方法吗?

使用 Dart 将 Uint8List 转换为字符串

如何初始化构造函数主体中的最终字段?

在 DART 中创建泛型类型的实例

dart中是否可以有一个私有构造函数?

dart列表最小值/最大值