使容器增长以适应列中同级的宽度

Mag*_*s W 4 flutter flutter-layout

Container在 a 中有两个小部件Column,每个小部件都包含一个Text小部件。我希望Container文本最短的 展开以匹配包含较长文本的另一个容器的宽度。具有较长文本的容器应包装Text小部件及其填充。

如果不诉诸容器上的固定宽度,我就无法让它工作:

return Column(
    mainAxisSize: MainAxisSize.min,
    children: [
        // This container has a shorter text than its sibling, so it should expand 
        // its width to match its sibling/parent
        Container(
            alignment: Alignment.center,
            width: 50, // I don't want this fixed width
            decoration: BoxDecoration(color: Colors.orange, borderRadius: BorderRadius.only(topLeft: Radius.circular(4), topRight: Radius.circular(4))),
            child: Padding(
                padding: const EdgeInsets.fromLTRB(8,4,8,4),
                child: Text('short'),
            )
        ),

        // This container has a longer text, so it should decide the width of the 
        // other container (and of the parent Column)
        Container(
            alignment: Alignment.center,
            width: 50, // I don't want this fixed width
            decoration: BoxDecoration(color: Colors.orange, borderRadius: BorderRadius.only(bottomLeft: Radius.circular(4), bottomRight: Radius.circular(4))),
            child: Padding(
                padding: const EdgeInsets.fromLTRB(8,4,8,4),
                child: Text('long text here'),
            )
        ),
    ]
);
Run Code Online (Sandbox Code Playgroud)

我尝试了几种方法来解决它,包括Expandedand Flexible,但它们都会导致“死亡红屏”(或至少是“烦恼”)。

编辑

只是要清楚 - 我希望Column只包装其内容,即将其宽度调整为容器的宽度。总而言之 - 一切都应该尽可能窄,除了具有最短文本的容器,它应该与其兄弟(具有较长文本的容器)一样宽。

小智 6

我在评论中看到了你的小提琴。而你需要的是IntrinsicWidth

  IntrinsicWidth(
    child: Column(
      crossAxisAlignment: CrossAxisAlignment.stretch,
      children: [
        // This container has a shorter text than its sibling, so it should expand
        // its width to match its sibling/parent
        Padding(
          padding: const EdgeInsets.symmetric(vertical: 1.0),
          child: Container(
            color: Colors.orange,
            child: Padding(
              padding: const EdgeInsets.fromLTRB(8, 4, 8, 4),
              child: Text(
                'short',
                textAlign: TextAlign.center,
              ),
            ),
          ),
        ),

        // This container has a longer text, so it should decide the width of the
        // other container (and of the parent Column)
        Padding(
          padding: const EdgeInsets.symmetric(vertical: 1.0),
          child: Container(
            color: Colors.orange,
            child: Padding(
              padding: const EdgeInsets.fromLTRB(8, 4, 8, 4),
              child: Text(
                'long text here',
                textAlign: TextAlign.center,
              ),
            ),
          ),
        ),
      ],
    ),
  ),
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明