Flutter:BoxConstraints 强制无限高度,由 Row Widget 引起

Posted

技术标签:

【中文标题】Flutter:BoxConstraints 强制无限高度,由 Row Widget 引起【英文标题】:Flutter: BoxConstraints forces an infinite height, caused by Row Widget 【发布时间】:2020-04-09 19:40:12 【问题描述】:

哦,这些 BoxConstraints 真是一场噩梦,请尽可能提高我的技能。

List<Chip> chipList = List.generate(toolsProvidedList.length, (index) 
  return Chip(
    label: SizedBox(height: 20.0, child: Text(toolsProvidedList[index]) ),
  );
);

  toolsProvided = Row(
    crossAxisAlignment: CrossAxisAlignment.stretch,
    mainAxisSize: MainAxisSize.min,
    children: chipList,
  );

我尝试将我的chipList 的Text 子项包装在灵活、扩展的SizedBox 中,但这些都不起作用。您可以看到我在 Row 小部件上使用了 MainAxisSize.min。那是行不通的。

行需要有一个已知的高度,我该如何给它呢?我不知道那里可能有多少筹码,它们可能会越过那排,我希望,结束。

【问题讨论】:

【参考方案1】:

我不太确定我是否不明白您需要什么...

但是试试这个看看是否有帮助

(删除您的 Row 小部件并将其替换为 Wrap

var toolsProvided = Container(
    child: Wrap(
      direction: Axis.horizontal,
      children: chipList
));

添加图片或更好的描述会有所帮助。

【讨论】:

哦,谢谢@encubos,那就更好了。我的解决方案将一大堆底部填充物混入其中,HORRIBLE。所以 Wrap 小部件是您如何强制父小部件 WRAP 它的子小部件,PEEEERRRRFECT!我向你致敬!【参考方案2】:

已解决!这是一个项目列表,因此直观地应该使用 ListView (doh)。但它再次抱怨Bounds。我认为 UI 可能是 Flutter 中最棘手的部分之一。

这是完整的修改和工作 sn-p。

  Widget toolsProvided = Flexible( child: ListView(
    children: List.generate(toolsProvidedList.length, (index) 
      return Chip(
        label: SizedBox(height: 20.0, child: Text(toolsProvidedList[index]) ),
      );
    ),
  ));

快乐的日子:)

【讨论】:

以上是关于Flutter:BoxConstraints 强制无限高度,由 Row Widget 引起的主要内容,如果未能解决你的问题,请参考以下文章

Flutter 布局 - BoxConstraints:容器不会缩小到 maxWidth 以下

BoxConstraints 强制无限高度误差

Flutter控件——布局控件:约束BoxConstraints

Flutter布局指南之深入理解BoxConstraints

颤振 - 布局

flutter Container()最小宽度 最小高度