如何在 Flutter 中创建自定义类型的小部件?
How to create custom types of widgets in Flutter?
我正在尝试创建几个小部件A
,它们都应该属于另一种类型的小部件B
,这样最后它们都可以传递给接受的构造函数仅 B
类型的小部件,但不包括 Container
、Text
等其他自定义小部件
我试过这样的事情:
Parent class:
class ProDynamicWidget {
const ProDynamicWidget({
required this.height
});
final double height;
}
Child classes:
class ProDynamicTitle extends ProDynamicWidget {
final String title;
ProDynamicTitle({
required this.title
}) : super(height: 50.0);
// Here should be a build method for the title
}
############################################################
class ProDynamicImage extends ProDynamicWidget {
final String imageUrl;
ProDynamicImage({
required this.imageUrl
}) : super(height: 70.0);
// Here should be a build method for the image
}
然后我想创建一个只接受 ProDynamicWidget 类型的小部件:
class TestOneWidget extends StatelessWidget {
const TestOneWidget({
Key? key,
required this.widget
}) : super(key: key);
final ProDynamicWidget widget;
@override
Widget build(BuildContext context) {
return Container();
}
}
我真的不明白现在怎么能得到具有独立构建方法的 child 小部件以及最后的构造函数只接受这些 child 小部件而不是每种类型的小部件的方式.
制作 ProDynamicWidget
abstract
并让它扩展 StatelessWidget
:
abstract class ProDynamicWidget extends StatelessWidget{
const ProDynamicWidget({
required this.height
});
final double height;
}
接下来,ProDynamicTitle
和 ProDynamicImage
只是扩展 ProDynamicWidget
,因此必须定义构建方法:
class ProDynamicTitle extends ProDynamicWidget {
final String title;
const ProDynamicTitle({
required this.title
}) : super(height: 50.0);
@override
Widget build(BuildContext context) {
return Text(title);
}
}
class ProDynamicImage extends ProDynamicWidget {
final String imageUrl;
const ProDynamicImage({
required this.imageUrl
}) : super(height: 70.0);
@override
Widget build(BuildContext context) {
return Image(image: NetworkImage(imageUrl));
}
}
您可以保持 TestOneWidget
不变。它只接受 ProDynamicWidget
.
的后代
我正在尝试创建几个小部件A
,它们都应该属于另一种类型的小部件B
,这样最后它们都可以传递给接受的构造函数仅 B
类型的小部件,但不包括 Container
、Text
等其他自定义小部件
我试过这样的事情:
Parent class:
class ProDynamicWidget {
const ProDynamicWidget({
required this.height
});
final double height;
}
Child classes:
class ProDynamicTitle extends ProDynamicWidget {
final String title;
ProDynamicTitle({
required this.title
}) : super(height: 50.0);
// Here should be a build method for the title
}
############################################################
class ProDynamicImage extends ProDynamicWidget {
final String imageUrl;
ProDynamicImage({
required this.imageUrl
}) : super(height: 70.0);
// Here should be a build method for the image
}
然后我想创建一个只接受 ProDynamicWidget 类型的小部件:
class TestOneWidget extends StatelessWidget {
const TestOneWidget({
Key? key,
required this.widget
}) : super(key: key);
final ProDynamicWidget widget;
@override
Widget build(BuildContext context) {
return Container();
}
}
我真的不明白现在怎么能得到具有独立构建方法的 child 小部件以及最后的构造函数只接受这些 child 小部件而不是每种类型的小部件的方式.
制作 ProDynamicWidget
abstract
并让它扩展 StatelessWidget
:
abstract class ProDynamicWidget extends StatelessWidget{
const ProDynamicWidget({
required this.height
});
final double height;
}
接下来,ProDynamicTitle
和 ProDynamicImage
只是扩展 ProDynamicWidget
,因此必须定义构建方法:
class ProDynamicTitle extends ProDynamicWidget {
final String title;
const ProDynamicTitle({
required this.title
}) : super(height: 50.0);
@override
Widget build(BuildContext context) {
return Text(title);
}
}
class ProDynamicImage extends ProDynamicWidget {
final String imageUrl;
const ProDynamicImage({
required this.imageUrl
}) : super(height: 70.0);
@override
Widget build(BuildContext context) {
return Image(image: NetworkImage(imageUrl));
}
}
您可以保持 TestOneWidget
不变。它只接受 ProDynamicWidget
.