【问题标题】:Flutter align two widgets in same position on stackFlutter 对齐堆栈上相同位置的两个小部件
【发布时间】:2021-09-30 16:22:50
【问题描述】:

我在堆栈中有 2 个小部件。其中之一在中心对齐。顶部的小部件是other stack。我想用第一个小部件的顶部和左侧位置显示第二个小部件。这是解释:

黄色区域是我的堆栈。第一个小部件设置为中心(子:myFirstWidget)。我的第二个小部件被引用 from here 它是一个可调整大小的小部件,因此它是另一个堆栈,它的子组件被“定位”。所以我需要为初始化设置顶部和左侧值。但是我的主堆栈已填充页面所以当我将第二个小部件的顶部和左侧设置为 0 时。如下所示。 但我想显示它与居中的孩子的顶部对齐,例如:

我的代码片段:

child: Container(
          color: Colors.red,
          child: Stack(
            children: [
              Center(
                child: Image.file(
                  File("myfilepath"),
                ),
              ),
              ResizableWidget(
                child: Container(
                  color: Colors.blue,
                ),
              ),
            ],
          ),
        ),

【问题讨论】:

    标签: flutter flutter-layout


    【解决方案1】:

    您可以使用 Position 小部件调整小部件的位置,如下所示:

    Positioned(
               child: ResizableWidget(
                        child: Container(
                               color: Colors.blue,
                               ),
                      ),
               top: 80,
               right: -5, 
    ),
    

    top 和 right 的值只是随机值,你应该检查什么适合你!

    【讨论】:

    • 但我的主要问题是我不知道顶部、左侧或右侧的值应该是什么?我的最高价值应该是第一个小部件的顶部。但我不知道它的位置,因为它是居中的。所以我不能给 manuel top 或 left 值。
    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    【解决方案2】:

    您应该将 Center 设为 Stack 的父级。

    由于Center,Stack将定位在其父级的中心,它将获取其最大子级的尺寸(高度和宽度),并根据对齐值定位其他子级。

    编辑:我修改了代码以包含 placeHolder 图像。在这里,我给了它一个 6000x2000 的大小,但您可以将其更改为您想要的任何值。代码按预期工作,请参阅下面的捕获。

    Widget build(BuildContext context) {
      return Scaffold(
        appBar: AppBar(),
        body: Center(
          child: Stack(
            alignment: AlignmentDirectional.topStart,
            children: [
              Image.network('https://via.placeholder.com/6000x2000'),
              SizedBox(
                  height: 50,
                  width: 50,
                  child: Container(
                    color: Colors.green,
                  ))
            ],
          ),
        ),
      );
    }
    

    【讨论】:

    • 我的主要问题是我不知道 image.file 小部件的大小。所以我不能把它放在“大小盒子”里。
    • @bss 那些 SizedBox 仅在这里举例。您可以将它们替换为您的 Image 小部件和 ResizableWidget。我将编辑我的答案。
    • 我明白了。当我将图像小部件直接堆叠时,它会溢出,所以我需要灵活地包装它。但是当我灵活地覆盖它时,它覆盖了所有空间。所以这个答案在我的情况下不起作用。
    • 我编辑了我的答案以包含一张图片。我给了它一个非常大的尺寸,它按预期工作。如果您有溢出,则意味着它在没有足够约束的 Column 或 Row 内。这是另一个问题,如果您需要帮助,我建议您再问一个问题。
    猜你喜欢
    • 1970-01-01
    • 2021-05-10
    • 2020-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-29
    • 2021-01-08
    相关资源
    最近更新 更多