如何在 Flutter 中创建自定义类型的小部件?

How to create custom types of widgets in Flutter?

我正在尝试创建几个小部件A,它们都应该属于另一种类型的小部件B,这样最后它们都可以传递给接受的构造函数仅 B 类型的小部件,但不包括 ContainerText 等其他自定义小部件

我试过这样的事情:

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;
}

接下来,ProDynamicTitleProDynamicImage 只是扩展 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.

的后代