限制Flutter中容器的最大宽度

Nis*_*sai 5 user-interface word-wrap flutter flutter-layout flutter-container

  Widget build(context) {
    return Row(
      mainAxisSize: MainAxisSize.min,
      children: [
        Container(
          width: 300,
          padding: EdgeInsets.all(10),
          decoration: BoxDecoration(
            color: color ?? Colors.blue,
            borderRadius: BorderRadius.circular(10)
          ),
          child: msg
        )
      ],  
    );
  }
Run Code Online (Sandbox Code Playgroud)

这是我的小部件的构建方法,它根据我作为msg参数传递的内容来呈现此UI

  1. 载入文字 在此处输入图片说明
  2. 一些很长的文字 在此处输入图片说明

现在我面临的问题是我无法在不设置宽度的情况下将文本包装在此容器/蓝色框中,但是如果我设置了容器/蓝色框的宽度,那么无论文本有多短,它将始终保持该宽度。

现在有一种方法可以设置容器/蓝盒的maxWidth(比如说500)?这样蓝框将变得像“ Loading”之类的小文本一样宽,而长文本则可以扩展到达到500个单位的宽度,然后包装文本?

长文本的必需输出:

对于小文本(如加载),我不希望UI发生任何更改,但对于长文本,我希望它看起来像这样。 在此处输入图片说明

小智 18

使用ConstrainedBoxBoxConstraints maxWidth

ConstrainedBox(
    constraints: BoxConstraints(maxWidth: 150),
    child: Container(
        color : Colors.blue,
        child: Text('Your Text here'),
    ),
)
Run Code Online (Sandbox Code Playgroud)

  • 我刚刚尝试了一下,问题是如果屏幕不是那么大,它会溢出屏幕。 (2认同)
  • 固定的!只需将此 ConstrainerBox 放入 Flex 中即可:·) (2认同)

小智 15

您可以使用以下首选方法向Container Widget添加约束maxWidth

Widget build(context) {
return Row(
  mainAxisSize: MainAxisSize.min,
  children: [
    Container(
      constraints: BoxConstraints(minWidth: 100, maxWidth: 200),
      padding: EdgeInsets.all(10),
      decoration: BoxDecoration(
        color: color ?? Colors.blue,
        borderRadius: BorderRadius.circular(10)
      ),
      child: msg
    )
  ],  
);
}
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助!


Pål*_*erg 6

这是我用于长文本的简单方法:

ConstrainedBox(
  constraints: BoxConstraints(maxWidth: 200),
  child: Container(
    child: Text(
      'Long string of text',
      maxLines: 2,
      overflow: TextOverflow.ellipsis,
    ),
  ),
)
Run Code Online (Sandbox Code Playgroud)

maxLines如果您希望仅显示一行文本,请注意该属性可能会有所帮助。


Moh*_*hri 6

对我来说至少将 Constrained 框放入 IntrinsicWidth 已经解决了问题。

IntrinsicWidth(
  child: Container(
    constraints: BoxConstraints(maxWidth: 200),
    child: Row(
      children: [
       
      ],
    ),
  ),
);
Run Code Online (Sandbox Code Playgroud)


jit*_*555 5

这需要在里面RowColumn小部件

1. 行

  Row(
      children: [
        Container(
            constraints: BoxConstraints(maxWidth: 300),
            decoration: BoxDecoration(
                borderRadius: BorderRadius.circular(8.0)),
            child: Text("Long Text....")
        ),
      ],
    );
Run Code Online (Sandbox Code Playgroud)

2. 专栏

Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        Container(
            constraints: BoxConstraints(maxWidth: 300),
            decoration: BoxDecoration(
                borderRadius: BorderRadius.circular(8.0)),
            child: Text("Long Text....")
        ),
      ],
    );
Run Code Online (Sandbox Code Playgroud)

在这两个示例中,它都有效,因为ColumnRow允许它的孩子扩展到给定的约束/大小。

注意:如果孩子想要与其父母不同的尺寸,而父母没有足够的信息来对齐它,那么孩子的尺寸可能会被忽略。


小智 1

也许在文本周围使用Flexible,然后将Flexible包装在固定大小的容器中?只是一个想法。