Flutter:不展开行

Flutter: Do not expand row

这是我的源代码:

Scaffold(
  body: Center(
    child: Container(
      color: Colors.green,
      child: Column(
        mainAxisSize: MainAxisSize.min,
        children: [
          Flexible(
              fit: FlexFit.loose, child: Image.asset('images/demo.png')),
          Row(
            mainAxisSize: MainAxisSize.min,
            children: [
              Expanded(
                child: Container(
                  color: Colors.yellow,
                  child: Text('Cancel'),
                ),
              ),
              Expanded(
                child: Container(
                  color: Colors.red,
                  child: Text('Okay'),
                ),
              ),
            ],
          ),
        ],
      ),
    ),
  ),
);

这是结果:

我希望它是这样的:

不使用固定尺寸,因为图片尺寸可能会有所不同。

我已经尝试在行子项上使用灵活。该解决方案的问题是绿色容器正在像这样展开:

我不想发生这种情况。

也许这会有所帮助。 你可以使用 Spacer();在两个文本 Cancel 和 Okay 之间。 Spacer() 会将第二个文本放在行尾。

Row(
  children[
     Container(child: Text('Cancel', style...)),
     Spacer(),
     Container(Text('Okay', style...)),
]
);

也许你可以获取图像的宽度并将其传递给包装列的容器:

import 'dart:io';

File image = new File('image.png'); // Or any other way to get a File instance.
var decodedImage = await decodeImageFromList(image.readAsBytesSync());
final width = decodedImage.width;

编辑,进行了更多搜索并找到了您似乎正在寻找的内容:

IntrinsicWidth 小部件确保子元素具有统一的宽度,这将是最宽元素的宽度(没有像基于 Stack 小部件的解决方案中那样的重叠问题)。所以这段代码完成了你想要做的事情:

Scaffold(
      body: Center(
        child: IntrinsicWidth(
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.center,
            children: [
              Flexible(
                flex: 1,
                fit: FlexFit.tight,
                child: Image.asset('images/demo.png'),
              ),
              Row(
                children: [
                  Expanded(
                    flex: 1,
                    child: Container(
                      color: Colors.yellow,
                      child: Text('Cancel'),
                    ),
                  ),
                  Expanded(
                    flex: 1,
                    child: Container(
                      color: Colors.red,
                      child: Text('Okay'),
                    ),
                  ),
                ],
              ),
            ],
          ),
        ),
      ),
    );

截图:


旧答案:

如果您不介意将图像底部的一点点与按钮重叠,堆栈 class 会根据其未定位的子项调整自身大小,因此这对您有用:

Scaffold(
      body: Center(
        child: Stack(
          fit: StackFit.loose,
          children: [
            Image.asset('images/demo.png'),
            Positioned(
              bottom: 0,
              left: 0,
              right: 0,
              child: Row(
                mainAxisSize: MainAxisSize.min,
                children: [
                  Expanded(
                    flex: 1,
                    child: Container(
                      color: Colors.yellow,
                      child: Text('Cancel'),
                    ),
                  ),
                  Expanded(
                    flex: 1,
                    child: Container(
                      color: Colors.red,
                      child: Text('Okay'),
                    ),
                  ),
                ],
              ),
            ),
          ],
        ),
      ),
    );

截图: