Flutter如何将一个widget作为参数传递

Hen*_*ães 1 dart flutter

我已经在 flutter 中开发了一个移动应用程序几天了,只是为了重用一些代码,我想将一个小部件作为参数传递,这样我就不必重复一堆代码。我尝试了在这里找到的一些解决方案,但没有一个有效。

这是我到目前为止所拥有的:

CarouselItem.dart

class CarouselItem extends StatelessWidget {

  CarouselItem({
    Key? key,
    required this.index, required this.height, required this.width, required this.title, required this.destination,
  }) : super(key: key);
  final int index;
  final double height;
  final double width;
  final String title;
  final RouteOneCallBack destination; //trying to pass the widget

//List of images
  List<String> list = [
    'https://audioguia.s3.eu-west-3.amazonaws.com/FOTOS/Alqueva/A1-placa+entrada.jpg',
  ];


  @override
  Widget build(BuildContext context) {
    return Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        Container(
          margin: EdgeInsets.all(6.0),
          child: ClipRRect(
            borderRadius: BorderRadius.circular(30.0),
            child: GestureDetector(
              child: Image.network(
                  list[index],
                  fit: BoxFit.cover,
                  height: height,
                  width: width,
                ),
              onTap: () {
                Navigator.push(
                  context,
                  MaterialPageRoute(
                    builder: (context) =>
                        destination(), //widget goes here
                  ),
                );
              },
            ),
          ),
        ),
        SizedBox(height: 20),
        Container(
          padding: EdgeInsets.only(left: 10),
          child: Text(
            title,
            style: TextStyle(fontWeight: FontWeight.bold),
          ),
        ),
      ],
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

主页.dart

我多么希望这一切能够顺利进行

              items: [
                CarouselItem(
                  index: 0,
                  width: 500,
                  height: 200,
                  title: "Destino 1",
                  destination: RouteOne()

                ),
Run Code Online (Sandbox Code Playgroud)

我错过了额外的步骤吗?提前致谢。基本上我想要做的与我对已有的 String 或 int 参数所做的相同,但似乎无法理解如何使用小部件执行此操作。

RouteOne() 是一个有状态的小部件

小智 5

class BottomSheetDialog extends StatelessWidget {
  final Widget? child;

  const BottomSheetDialog({Key? key, @required this.child}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Container(
        height: Sizes.s350,
        decoration: BoxDecoration(
            color: Get.theme.cardColor,
            borderRadius: BorderRadius.only(
                topLeft: Radius.circular(Sizes.s30),
                topRight: Radius.circular(Sizes.s30))),
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: [
            Expanded(child: child!),
          ],
        ));
  }
}

// call 

 BottomSheetDialog(child:const Text("test"));



 
Run Code Online (Sandbox Code Playgroud)