[英]Error: Type argument 'RoutesBloc' doesn't conform to the bound 'BlocBase<S>' of the type variable 'B' on 'BlocBuilder'
[英]dart class hierarchy error - 'a' doesn't extend 'b' Try using a type that is or is a subclass of 'b'
我有這個代碼:
class GroceryItemRepository extends ARepository<GroceryItemDomainEntity, int> {
GroceryItemRepository(IHttpDataSource httpDataSource)
: super(httpDataSource, 'GroceryItems');
}
導致此編譯時錯誤:
'GroceryItemDomainEntity' doesn't extend 'ADomainEntity<GroceryItemDomainEntity, int>'.
Try using a type that is or is a subclass of 'ADomainEntity<GroceryItemDomainEntity, int>'
我不知道為什么GroceryItemDomainEntity
不擴展ADomainEntity<GroceryItemDomainEntity, int>
。
這是 class 層次結構:
abstract class GroceryItemDomainEntity extends AVeganItemDomainEntity
implements _$GroceryItemDomainEntity {
abstract class AVeganItemDomainEntity
extends ADomainEntity<AVeganItemDomainEntity, int> {
abstract class ADomainEntity<EntityType, IdType> extends AEntity<EntityType>
implements IDomainEntity<EntityType, IdType> {
abstract class AEntity<EntityType> implements IEntity<EntityType> {
當我GroceryItemDomainEntity
聲明為:
abstract class GroceryItemDomainEntity extends ADomainEntity<GroceryItemDomainEntity, int>
但我需要GroceryItemDomainEntity
來包含AVeganItemDomainEntity
的成員。 為什么GroceryItemDomain
實體不擴展ADomainEntity<GroceryItemDomainEntity, int>
?
編輯 - 對不起,我錯過了這個 class:
import 'package:vepo/src/common/constants/environment_constants.dart';
import 'package:vepo/src/data/data_sources/remote/i_remote_data_source.dart';
import 'package:vepo/src/domain/common/domain_entity/a_domain_entity.dart';
import 'i_repository.dart';
abstract class ARepository<EntityType extends ADomainEntity<EntityType, IdType>,
IdType> implements IRepository<EntityType> {
ARepository(this.httpDataSource, this.$baseUri);
final IHttpDataSource httpDataSource;
final String $baseUri;
@override
Future<EntityType> $fetch() {
throw UnimplementedError();
}
@override
Future<EntityType> $save({EntityType entity}) {
var uri = $baseUri;
if (entity.id != null) {
uri = uri + '${entity.id}';
}
final Uri theUri = Uri(path: '${EnvironmentConstants.of().apiUrl}/$uri');
return httpDataSource.post<EntityType>(theUri, body: entity);
}
}
AVeganItemDomainEntity extends ADomainEntity<AVeganItemDomainEntity, int>
GroceryItemDomainEntity extends AVeganItemDomainEntity
所以GroceryItemDomainEntity
擴展ADomainEntity<AVeganItemDomainEntity, int>
。
在GroceryItemRepository extends ARepository<GroceryItemDomainEntity, int>
中, EntityType
是GroceryItemDomainEntity
。
然而
ARepository<EntityType extends ADomainEntity<EntityType, IdType>, IdType>
由於EntityType
是GroceryItemDomainEntity
, ARepository
期望GroceryItemDomainEntity
擴展ADomainEntity<GroceryItemDomainEntity, int>
但它反而擴展ADomainEntity<AVeganItemDomainEntity, int>
。
AVeganItemDomainEntity
是 GroceryItemDomainEntity 的超級GroceryItemDomainEntity
。 因此, AVeganItemDomainEntity
不能用於GroceryItemDomainEntity
的地方。 但另一種方法是可能的。
這需要更改EntityType
在ARepository
中擴展的內容。 我能想到的一個可能的解決方案是使用具體的基本類型,如AEntity
或ADomainEntity
。
ARepository<EntityType extends ADomainEntity<AEntity, IdType>, IdType>
ARepository<EntityType extends ADomainEntity<ADomainEntity, IdType>, IdType>
要不就
ARepository<EntityType extends ADomainEntity, IdType>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.