Сделать контейнерный виджет заполнить родительский элемент вертикально

TL; DR Нужен контейнер, чтобы заполнить вертикальное пространство, чтобы он мог действовать как прослушиватель ontap. Перепробовал большинство решений, но ничего не помогло.

Так что я пытаюсь сделать так, чтобы мой контейнер заполнял вертикальное пространство, сохраняя при этом фиксированную ширину. Два первых - это то, что у меня есть, а третий - то, что я хочу. Идея состоит в том, чтобы сделать контейнер прозрачным с помощью слушателя жестов. Если у кого-то есть идея о другом решении, не стесняйтесь.

Widget build(BuildContext context) {
return new GestureDetector(
  onHorizontalDragUpdate: _move,
  onHorizontalDragEnd: _handleDragEnd,
  child: new Stack(
    children: <Widget>[
      new Positioned.fill(           
        child: new Row(
          mainAxisAlignment: MainAxisAlignment.end,
          children: <Widget>[
            new Container(
              child: new IconButton(                          
                padding: new EdgeInsets.only(top: 16.0, bottom: 16.0, left: 24.0, right: 24.0),
                icon: new Icon(Icons.warning),
                color: Colors.black12,
                onPressed: () {},
              )
            ),
          ],
        ),
      ),
      new SlideTransition(
        position: new Tween<Offset>(
          begin:  Offset(0.0, 0.0),
          end: const Offset(-0.6, 0.0),
        ).animate(_animation),
        child: new Card(
          child: new Row(
            children: <Widget>[
              new Container(
                width: 20.0,
                height: 20.0,
                color: Colors.amber,
              ),
              new Expanded(
                child: new Column(
                  mainAxisSize: MainAxisSize.min,
                  children: <Widget>[

                    _getListTile(),
                    _ifStoplineIsToBeShown()
                  ],
                ),
              )
            ],
          )
        ),
      ),
    ],
  )
);

}

Я совершенно уверен, что что-то упустил, учитывая тот факт, что я пробовал много разных вещей, и, похоже, ничего не работает.

Я также загрузил изображение с отладочной картиной здесь.

PS. Я знаю, что установил высоту на фиксированное значение, но это единственный способ показать контейнер.

Ответы

Ответ 1

Хитрость заключается в объединении виджета IntrinsicHeight и Row с crossAxisAlignment: CrossAxisAlignment.stretch

Это заставляет детей Строка расширяться вертикально, но Row будет занимать наименьшее количество вертикального пространства.

Card(
  child: IntrinsicHeight(
    child: Row(
      crossAxisAlignment: CrossAxisAlignment.stretch,
      children: <Widget>[
        Container(
          width: 20.0,
          color: Colors.amber,
        ),
        // Expanded(...)
      ],
    ),
  )
)

Ответ 2

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

Container(
  color: Colors.green,
  child: Text("Flutter"),
  constraints: BoxConstraints.expand(),
)

Пожалуйста, обратитесь к ссылке Шпаргалка контейнера для получения дополнительной информации о контейнере