Flutter Container 在 Row 小部件内定位或对齐

Posted

技术标签:

【中文标题】Flutter Container 在 Row 小部件内定位或对齐【英文标题】:Flutter Container Positioning or alignment inside Row widget 【发布时间】:2020-03-05 15:44:29 【问题描述】:

我是 Flutter 的新手。现在学习如何定位或对齐小部件。我的行小部件中有两个容器。我想在左上角设置我的第一个容器(红色容器),也想在右上角设置我的第二个容器(蓝色容器)。我怎样才能做到这一点?

这里是代码示例:

class MyRow extends StatelessWidget 
  @override
  Widget build(BuildContext context) 
    return MaterialApp(
      home: Scaffold(
        backgroundColor: Colors.teal,
        body: SafeArea(
          child: Row(
            children: <Widget>[
              Container(
                width: 100.0,
                height: 100.0,
                color: Colors.red,
              ),
              Container(
                width: 100.0,
                height: 100.0,
                color: Colors.blue,
              ),
            ],
          ),
        ),
      ),
    );
  

【问题讨论】:

【参考方案1】:

Flutter 在 Layouts 上有丰富的文档,Mr.Tomek Polański 也有 explain Layouts 的详细信息。

您必须了解行和列方面的MainAxisAlignmentCrossAxisAlignment

当你想定位有单个孩子的东西时,使用 FittedBoxConstrainedBoxSizedBox

因为您有多个孩子的 ROW Widget CrossAxisAlignment 是您的朋友使用它来实现您的目标。

    将您的 Container 包裹在 Expanded Widget 下,这将为您提供 Flex 属性,它可以帮助您为 Container 提供灵活性。扩展的小部件也将有助于您的横向和纵向屏幕尺寸。 在您的容器小部件中使用 SizedBox 小部件,这将为您提供最大宽度的不可见间隔大小的盒子。 我把第一个容器(红色一个)作为 flex 属性 1 以及第二个容器(蓝色一个),这意味着将两个容器的行大小设置为 1 倍,并将大小加倍到我不可见的 SizedBox 中,这样我们的 Red Box 和 BlueBox 就可以放在左上角和右上角。

在这里您可以看到代码的最终版本。

return Scaffold(
  backgroundColor: Colors.teal,
  body: SafeArea(
    child: Row(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: <Widget>[
        Expanded(
          flex: 1,
          child: Container(
            width: 100.0,
            height: 100.0,
            color: Colors.red,
          ),
        ),
        Expanded(
          flex: 2,
          child: Container(
            width: double.infinity,
          ),
        ),
        Expanded(
          flex: 1,
          child: Container(
            width: 100.0,
            height: 100.0,
            color: Colors.blue,
          ),
        ),
      ],
    ),
  ),
);

【讨论】:

【参考方案2】:

Positioned 小部件仅与 Stack 小部件一起使用,因此您可以使用以下示例解决您的问题,但使用 Row 小部件可能无法实现

Stack(children: <Widget>[
            Positioned(
              top: 5,
              left: 5,
              child: Container(
                width: 100.0,
                height: 100.0,
                color: Colors.red,
              ),),
            Positioned(
              top: 5,
              right: 5,
              child: Container(
                width: 100.0,
                height: 100.0,
                color: Colors.blue,
              ),),
          ],
)

输出:

【讨论】:

以上是关于Flutter Container 在 Row 小部件内定位或对齐的主要内容,如果未能解决你的问题,请参考以下文章

Flutter Bottom 被像素溢出,尝试了 Column()、Row()、Container() 等等

Flutter Group 布局

Flutter 绘制小圆点

Flutter - 如何用动画扩展小部件?

Container inside Row 和 Row inside Container

如何在 Flutter 中为 Container Widget 下划线