1.使用dynamic属性并转换
我想要一个自定义类,在那里我可以传递泛型参数的类型
有可能这样做吗?或者我必须使用动态类型?
有类似的东西吗:Team|Site item;
或者我需要使用这个:dynamic item;
class Site {
String name;
int levels;
Site({
required this.name,
required this.levels,
});
}
class Team {
String name;
String description;
Team({
required this.name,
required this.description,
});
}
class CustomItem {
// Related line
Team|Site item;
CustomItem({
required this.item,
});
getName() {
print(item.name);
}
}
void main() {
final team = Team(name: 'dev', description: 'a team of dev');
final site = Site(name: 'paris', levels: 6);
final customTeam = CustomItem(item: team);
final customSite = CustomItem(item: site);
customTeam.getName();
customSite.getName();
}
从Flutter 2.10.3开始,该功能还不存在,但有两种解决方法。
如果您只需要对一个类进行这种特殊处理,#1可以很好地工作,但很难维护。
#2是一个更好的解决方案——易于扩展、重用和理解。
1.使用dynamic属性并转换item
类型
class CustomItem {
// Related line
dynamic item;
CustomItem({
required this.item,
});
String getName() {
switch (item.runtimeType) {
case Site:
return (item as Site).name;
case Team:
return (item as Team).name;
default:
return ''; // or throw error
}
}
}
- 使用具有相同属性名称的抽象类
abstract class ItemWithName {
String name;
ItemWithName({required this.name});
}
class Site extends ItemWithName {
int levels;
Site({
required name,
required this.levels,
}) : super(name: name);
}
class Team extends ItemWithName {
String description;
Team({
required name,
required this.description,
}) : super(name: name);
}
class CustomItem {
// Related line
ItemWithName item;
CustomItem({
required this.item,
});
String getName() {
return item.name;
}
}