如何解决为什么“基数派生A ||基数派生B”不能按预期工作?
if (state is NoteInitial || state is NewNote)
return ListView.builder(
itemCount: state.notes.length,padding: EdgeInsets.symmetric(vertical: 10),itemBuilder: (BuildContext context,int index) {
return _NoteCard(state.notes[index],key: UniqueKey(),);
});
NoteInitial和NewNote都派生自抽象类NoteState,状态为NoteState。如果我只写if(state is NoteInitial)
,那么代码可以编译,就像我用newNewNote编写代码一样,但是如果我同时编写,则编译器会抱怨两者都定义了The getter 'notes' isn't defined for the type 'NoteState'.
注释,这是编译器有问题,或者我做错了什么?
解决方法
如果编译器将变量类型缩小为具有这些属性的特定类型,则只能确保属性notes
存在。
我猜您两种类型都具有此属性,但彼此独立吗?但是编译器不能真正知道这一点。尚未将其范围缩小到特定类型。
如果是这样,那么您可能想要创建另一个基类或接口,为它们两个都实现它,然后使if
语句依赖于此。也许您的一个州是另一个州的超集,那也可以。
我要做的是我有一个称为NoteWithNotesState
的抽象状态,该状态具有一个属性notes
,然后NewNote
和InitialNote
都从中导出。然后,您if
可能是if(state is NoteWithNotesState)
,那么您应该可以毫无问题地访问该属性。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。