Сделать контейнерный виджет заполнить родительский элемент вертикально
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(),
)
Пожалуйста, обратитесь к ссылке Шпаргалка контейнера для получения дополнительной информации о контейнере