当前位置: 首页 > 知识库问答 >
问题:

如何在Flutter中将父小部件的高度传递给子小部件?

卞琨
2023-03-14

我正在尝试从Flutter中的父部件传递堆栈的高度,但我无法做到。请帮助我找到解决方案,我将把我的代码作为参考。

父小工具

  @override
  Widget build(BuildContext context) {
    return  SingleChildScrollView(
      child: Stack(
        children: [

          Picturebackground(//pass Stack height ),

          Center(
            child: Column(
              mainAxisSize: MainAxisSize.max,
              crossAxisAlignment: CrossAxisAlignment.center,
              children: <Widget>[
                Text('varying text'),
              ],
            ),
          ),
        ],
      ),
    );
  }

子部件

dynamic listImagesnotFound = ['assets/svg1.svg','assets/svg2.svg','assets/svg3.svg','assets/svg4.svg'];
Random rnd;

class Picturebackground extends StatelessWidget {
  final double stack_height;
  Picturebackground ({Key key, this.stack_height}) : super(key: key);

  Widget build(BuildContext context) {
    int min = 0;
    int max = listImagesnotFound.length - 1;
    rnd = new Random();
    int r = min + rnd.nextInt(max - min);
    String image_name = listImagesnotFound[r].toString();
    return SvgPicture.asset(image_name,
      fit: BoxFit.cover,
      width: MediaQuery.of(context).size.width,
      height: // get the height of the Stack
    );
  }
}

如何将堆栈的高度传递给SVGPicture。

共有1个答案

刘元青
2023-03-14

可以使用LayoutBuilder获取PictureBackground小部件的约束:

dynamic listImagesnotFound = ['assets/svg1.svg','assets/svg2.svg','assets/svg3.svg','assets/svg4.svg'];
Random rnd;

class Picturebackground extends StatelessWidget {
  Widget build(BuildContext context) {
    int min = 0;
    int max = listImagesnotFound.length - 1;
    rnd = new Random();
    int r = min + rnd.nextInt(max - min);
    String image_name = listImagesnotFound[r].toString();

    return LayoutBuilder(
      builder: (context, constraints) {
        // get here
        final height = constraints.maxHeight;

        return SvgPicture.asset(image_name,
          fit: BoxFit.cover,
          width: MediaQuery.of(context).size.width,
          height: height // use here
        );
      }
    );
  }
}
 类似资料:
  • 问题内容: 在Tkinter中是否可以将事件直接传递给父窗口小部件? 我有一个画布,该画布被其他画布的网格覆盖(是复数吗?),我使用方法添加了该画布。我希望某些事件(例如鼠标释放事件)由父画布处理。 如果仅将事件绑定到父方法,则和坐标相对于捕获事件的子画布而言。 问题答案: Tkinter不会将事件传递给父窗口小部件。但是,您可以通过使用绑定标签(或“ bindtags”)来模拟效果。 我能给出的

  • 我是Flutter和Dart的新手。我有一些来自基于api json的数据,数据的变量称为。我从官方flutter留档中获取了这个示例代码,我希望能够使用变量并替换字符串文本,如下所示: 但是,我在第行标题中遇到了一个错误:const Text(data[index][“name]),,错误是类型常量创建的参数必须是常量表达式。此错误来自Android Studio本身(版本3.2) 但当我使用这

  • 有趣的是,我尝试了一个switch case语句,它给了我同样的警告,因此我无法运行代码。是我做错了什么,还是让人无法使用if/else或switch语句而不认为有死代码?

  • 问题内容: 即使在指定Container GridView的高度之后,我的代码仍在生成方形小部件。 上面代码的输出如左图所示。如何获得带有自定义高度小部件的GridView ,如右图所示? 问题答案: 关键是。这个值是用来确定的布局在。为了获得所需的外观,您必须将其设置为 ()。解决方案是这样的:

  • 我一直在尝试在tkinter中创建一个自定义小部件,没什么特别的,只是一个包含一个条目和两个标签的框架。我希望标签和框架能够访问父应用程序的StringVars(即两个标签的textvariable,以及条目textvariable)。我认为通过将这些名称作为关键字args传递给初始化方法,这应该相当简单,但是我遇到了麻烦。这是我的密码: 我遇到了一个问题,我实际上无法将任何其他内容传递给我的新小