这是我目前正在处理的错误:
A value of type '(Null, List<BoatModel>)' can't be returned from the method 'getBoatsFromOwnership' because it has a return type of 'Future<(Failure?, List<Boat>?)>'.
字符串
与此代码相关:
@override
Future<(Failure?, List<Boat>?)> getBoatsFromOwnership(User user) async {
try {
return (null, await boatsDataSource.getBoatsFromOwnership(user.id));
} on DatabaseException {
return (DatabaseFailure(), null);
}
}
型
让我困惑的是,这段代码,它做的完全相同,只是对其他数据,工作得很好:
@override
Future<(Failure?, List<Todo>?)> getTodos(Boat boat) async {
try {
return (null, await todosDataSource.getTodos(boat.id));
} on DatabaseException {
return (DatabaseFailure(), null);
}
}
型
在return (null, boats)
中也出现了同样的问题:
@override
Future<(Failure?, List<Boat>?)> getBoatsFromRelationships(User user, List<Relationship> relationships) async {
final relationships = await relationshipsRepository.getRelationships(user);
if (relationships.$1 == DatabaseFailure() || relationships.$2 == null) {
return (DatabaseFailure(), null);
}
final relationshipsIds = relationships.$2!.map((relationship) => relationship.id).toList();
try {
final boats = await boatsDataSource.getBoats(
userId: user.id,
relationshipIds: relationshipsIds,
);
return (null, boats);
} on DatabaseException {
return (DatabaseFailure(), null);
}
}
型
其他部分也是相同的:class BoatModel extends Boat
个
和/或class TodoModel extends Todo
个
就像:Future<List<BoatModel>> getBoatsFromOwnership(String userId);
和/或Future<List<TodoModel>> getTodos(String boatId);
这当然使用了Dart记录,但是我看不出我的boats和todos代码之间的区别。如果需要任何其他代码来解决这个问题,我很乐意提供更多的代码片段。我不知道是什么导致了这个问题。我当然可以Map类型,但我认为这个问题根本不应该存在。
3条答案
按热度按时间qzlgjiam1#
我怀疑这和
Record
-s有什么关系。看起来这就是Dart的泛型处理集合的方式,这意味着List<BaseClass>
不能存储DerivedClass
元素(没有显式强制转换),因为在这种情况下,类层次结构不受尊重。不知道为什么你的
getTodos
方法能像预期的那样工作。请参阅this excellent comment以获得更详细的解释。
w8ntj3qf2#
今天我重新审视了这个问题,因为我想知道为什么相同的代码适用于所有其他模型/实体,但不适用于船。我并排打开这些类并进行比较,在某个时候意识到我曾经在导入中使用了大写,所以是
/Boats/
而不是/boats/
。在我纠正这个问题后,问题得到了解决。但是,没有任何迹象表明导入不正确或丢失。这个错误的原因是我复制了代码,然后用find & replace替换了相关部分。在这样做的过程中,我显然犯了一个大写错误。我们从中学到了什么?不要在自己的代码中复制和粘贴太多。djp7away3#
它的意思正是它所说的。您正在尝试将BoatModel放入Boat提供的空间中。那没用的
您似乎在代码中混淆了Boat和BoatModel。也许你需要摆脱其中的一个。