Flutter - 在一行中只对齐一个小部件

Flutter - Align only one widget inside of a Row

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

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

这是目前的代码。谢谢

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,),)
          ];
        },
      ),
    )
  ],
)

这是一种方法:

  • Align(alignment: Alignment.topRight)
  • 包裹你的 SizedBox
  • IntrinsicHeight 包裹你的 Row 以便横轴 不拉伸

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