【问题标题】:Flutter - Align only one widget inside of a RowFlutter - 仅对齐行内的一个小部件
【发布时间】:2021-09-14 17:28:44
【问题描述】:

我有一个高度可以变化的文本,后跟一个 PopupMenuButton。我希望文本在垂直轴上居中对齐(这样当只有 1 线文本时就不会出现奇怪的空白),但无论文本的高度如何,PopupMenuButton 都保持在右上角.因此使用 crossAxisAlignement 在这里不起作用,因为所有小部件都会受到影响。在文本或 PopupMenuButton 上使用 Align 小部件不起作用,而 textAlign 也不起作用似乎任何解决方案都必须在 Row 级别而不是在其子级中实现,这是有道理的。

现在我使用 Row 来包含这 2 个小部件,但如果我想要之前提到的行为,我不太确定它是否是我所需要的。是否有针对 Row 的解决方案,或者我可以为此使用的其他小部件?

下面是代码。谢谢。

Row(
  children: [
    Expanded(
      child: RichText(
        text: TextSpan(), // bunch of text in there
        )
      )
    ),
    SizedBox( // To box in the 3 dots icon (material design forces 48px otherwise)
      height: 24,
      width: 24,
      child: PopupMenuButton(
        padding: EdgeInsets.all(0),
        onSelected: menuSelect,
        itemBuilder: (BuildContext context) {
          return [
            PopupMenuItem(value: 0, child: Text('Read', textAlign: TextAlign.center,),),
            PopupMenuItem(value: 1, child: Text('Delete', textAlign: TextAlign.center,),)
          ];
        },
      ),
    )
  ],
)

【问题讨论】:

    标签: flutter alignment row-height


    【解决方案1】:

    这是一种方法:

    • Align(alignment: Alignment.topRight) 包裹你的SizedBox
    • IntrinsicHeight 包裹你的Row,这样横轴 不会拉伸

    或者,如果您不熟悉 Stack 小部件,您可能需要查看它。

    【讨论】:

    • 感谢您的解决方案。我已经研究过 Stack,但我认为可能有一种更优雅的方法来解决这个问题,您提供了这种方法。虽然它解决了我的问题,但我不确定为什么 IntrinsicHeight 会产生这种效果。是因为它在最终布局阶段之前进行了“推测布局通过”,如此处所述api.flutter.dev/flutter/widgets/IntrinsicHeight-class.html?如,PopupMenuButton 不关心这个而 RichText 是,导致差异?谢谢!
    • 答案就在这句话中:这个类很有用,例如,当无限高度可用时,你想要一个孩子,否则它会尝试无限扩展,而不是将自身大小调整为更合理的高度。 这里,“更合理的高度”是Row 中最高的小部件之一。我认为它基本上类似于Row(mainAxisSize: MainAxisSize.min),但对于交叉轴,或者类似于ListView(shrinkWrap: true)
    猜你喜欢
    • 2021-03-13
    • 2020-10-23
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    • 2021-08-26
    • 1970-01-01
    • 2021-12-09
    • 2020-10-08
    相关资源
    最近更新 更多