Flutter/Dart: Subclass一个冻结数据class
Flutter/Dart: Subclass a freezed data class
我正在使用以下插件:https://pub.dev/packages/freezed
我想子class 冻结数据 class 以在我的数据层中提供额外的功能。
所以我的数据 class 看起来像:
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 class 作为我的 CardModel 的超级 class,以便 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 class 简单地“包装”在 CardModel 中,并提供一个不太优雅的 toCard() 方法:S
Freezed 目前不支持继承,所以建议使用组合而不是继承,正如创建者在这里提到的:
https://github.com/rrousselGit/freezed/issues/464
并在 post 的评论中。
我正在使用以下插件:https://pub.dev/packages/freezed
我想子class 冻结数据 class 以在我的数据层中提供额外的功能。 所以我的数据 class 看起来像:
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 class 作为我的 CardModel 的超级 class,以便 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 class 简单地“包装”在 CardModel 中,并提供一个不太优雅的 toCard() 方法:S
Freezed 目前不支持继承,所以建议使用组合而不是继承,正如创建者在这里提到的:
https://github.com/rrousselGit/freezed/issues/464
并在 post 的评论中。