簡體   English   中英

Flutter 如何將小部件作為參數傳遞

[英]Flutter how to pass a widget as a parameter

我已經在 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),
          ),
        ),
      ],
    );
  }
}

家.dart

我怎么想要這個 go

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

                ),

我錯過了額外的步驟嗎? 提前致謝。 基本上我想做的與我對已有的 String 或 int 參數所做的相同,但似乎無法理解如何使用小部件執行此操作。

RouteOne() 是一個有狀態的小部件

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"));



 

您可以將小部件作為參數傳遞,因為StatefulWidget擴展了Widget

這是常見的用法。

final Widget destination;

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM