7

如何防止 aRaisedButton扩展以填充Expanded包含它的 a?我想创建与可用空间成比例的三列宽度,但我希望每列中的 child 为其自然大小,而不消耗其 parent 的整个宽度Expanded

  Widget _controls(BuildContext cx) {
    return Row(
      children: [
        Expanded(
          flex: 1,
          child: player.isOnFirstItem
              ? Container()
              : IconButton(
                  icon: Icon(Icons.arrow_back),
                  onPressed: () => control.gotoPreviousItem(),
                ),
        ),
        Expanded(
          flex: 4,
          child: player.isComplete()
              ? Text(player.currentItem.status) // I'll be adding more here
              : RaisedButton(
                  child: Text(player.currentItem.actionText),
                  onPressed: () => player.currentItem.action(),
                ),
        ),
        Expanded(
          flex: 1,
          child: player.isOnLastItem
              ? Container()
              : IconButton(
                  icon: Icon(Icons.arrow_forward),
                  onPressed: () => player.gotoNextItem(),
                ),
        ),
      ],
    );

RaisedButton我进一步将它嵌套在Container. 我无法弄清楚哪些属性可能会阻止这种情况。

到处寻找答案,似乎每个人都在试图完成相反的事情。

4

1 回答 1

9

看看文档是怎么Expanded说的:

扩展 Row、Column 或 Flex 的子项以使子项填充可用空间的小部件。

因此,RaisedButton将填满可用空间。

您试图用 包裹按钮,但如果它有一个孩子Container,请查看文档中的内容:Container

(在这种情况下)小部件有一个孩子,但没有高度、宽度、约束和对齐方式,并且容器将约束从父级传递给子级,并调整自身的大小以匹配子级。

因此,RaisedButton将从 的父级获取约束Container,即填充可用空间。

您需要RaisedButton用一个小部件包装它,该小部件本身的大小不匹配孩子的大小(因为它不会扩展)并且不会改变孩子的大小(因为孩子可以扩展)。

因此,一些包装RaisedButton满足这些条件的小部件可能是:

  • Row
  • Wrap
  • UnconstrainedBox
  • ColumnmainAxisSize: MainAxisSize.min
  • CenterheightFactor: 1.0.
  • AlignheightFactor: 1.0.
于 2019-10-26T14:16:59.413 回答