我有一个具有通用列表作为属性的类,我必须对其进行初始化,并且该类具有使用该列表返回卡片的功能:
class buildCard{
buildCard(this.list);
final List list;
Widget buildCard(int position) {
return Card(child: ListTile(title: list[position].name,),);
}
现在,如您所见,我使用
list[position].name
适用于我所拥有的大多数东西,但是,如果我将得到一个列表,其中没有以“名称”为键的列表,那么我会遇到一些麻烦。我该如何避免这个问题?
答案 0 :(得分:1)
您可以使用is
来检查类型
Widget buildCard() {
if(list[position].name is List) {
return Card(child: ListTile(title: list[position][0].name,),); // or similar - I don't know your exact structure
} else {
return Card(child: ListTile(title: list[position].name,),);
}
}
答案 1 :(得分:1)
您可以约束List
,以便只能传递具有name属性的对象。
abstract class Named {
Widget name;
}
class buildCard {
buildCard(this.list);
final List<Named> list;
Widget buildCard(int position) {
return Card(child: ListTile(title: list[position].name,),);
}
}
答案 2 :(得分:1)
您必须混合使用前面的答案才能获得所需的内容(贷方为@GünterZöchbauer)
abstract class Named {
String name;
}
class Person implements Named {
String name;
Person(this.name);
}
class NotAPerson {
String noName;
NotAPerson(this.noName);
}
class BuildCard {
BuildCard(this.list);
final List list;
Widget buildCard(int position) {
if(list[position] is Named) {
return Card(child: ListTile(title: list[position].name,),);
} else {
return Card(child: ListTile(title: list[position].noName,),);
}
}
}
main() {
BuildCard b = BuildCard([Person, NotAPerson]);
b.buildCard(0); // Will access name
b.buildCard(1); // Will not access name
}