Не допустить заполнения виджетом предка, развернутого во флаттере - PullRequest
1 голос
/ 26 октября 2019

Как сохранить RaisedButton от расширения до Expanded, содержащего его? Я хочу создать три столбца ширины, пропорциональных доступному пространству, но я хочу, чтобы дочерний элемент в каждом столбце имел его естественный размер без использования всей ширины его родителя 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. Я не могу понять, какие свойства могут этому помешать.

В поисках ответов кажется, что все пытаются добиться противоположного.

1 Ответ

1 голос
/ 26 октября 2019

Посмотрите, что написано в документации Expanded:

Виджет, который расширяет дочерний элемент строки, столбца или изгиба так, что дочерний объект заполняет доступное пространство.

Итак, RaisedButton заполнит доступное пространство.

Вы пытались обернуть кнопку Container, но посмотрите, что написано в документации Container на случай, если у нее есть дочерний элемент:

(в этом случае) у виджета есть дочерний элемент, но нет высоты, ширины, ограничений и выравнивания, а контейнер передает ограничения от родителя дочернему элементу и сам изменяет размеры для соответствияребенок.

Итак, RaisedButton будет принимать ограничения от родителя Container, который должен заполнить доступное пространство.

Что вам нужно, этооберните RaisedButton виджетом, размер которого не соответствует самому размеру дочернего элемента (потому что он не будет расширяться) и не изменяет размер дочернего элемента (потому что дочерний элемент может расширяться).

Итак, некоторые виджеты для переноса RaisedButton, отвечающие этим условиям, могут быть:

  • Row
  • Wrap
  • UnconstrainedBox
  • Column с mainAxisSize: MainAxisSize.min
  • Center с heightFactor: 1.0.
  • Align с heightFactor: 1.0.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...