Флаттер: как отцентрировать ребенка, но установить предел того, насколько большой он может расти на одной стороне поля - PullRequest
0 голосов
/ 24 марта 2020

У меня есть домашний экран / экран входа в систему, который состоит из столбца, который заполняет весь экран следующим образом:

Column(
  children: <Widget>[
    Expanded(
      child: Container(
        child: Logo(),
      ),
    ),
    showThis ? This() : That(),
  ],
),

Второй дочерний элемент столбца - динамический c и может иметь различную высоту. , и на этом экране будут вводы, поэтому клавиатура также будет влиять на высоту.

Я хочу центрировать Logo() вертикально внутри контейнера, когда он маленький (например, когда клавиатура активна), но ограничить, насколько верхнее поле 'может увеличиваться, поэтому, когда клавиатура скрыта и This() / That() достаточно мала, Logo() будет находиться в положении c на экране, скажем 150 сверху (нет длиннее по центру по вертикали).

Один метод, который я пробовал, использовал 2 пустых Expanded() сверху и снизу Logo() и завернул верхнюю часть в ConstraintedBox(), но я не смог заставить его вести себя правильно.

Ответы [ 2 ]

0 голосов
/ 30 марта 2020

Вот что у меня получилось:

Column(
  children: <Widget>[
    Expanded(
      child: Column(
        children: <Widget>[
          // constrain top spacing with a max height
          Flexible(child: Container(height: 160)),
          _logo(),
          Spacer(),
        ],
      ),
    ),
    _bottomWidget(),
  ],
),
0 голосов
/ 24 марта 2020

Пробовали ли вы с Center(), а также если вы хотите в определенную c позицию, используйте Stack, например

Stack(
  children: <Widget>[
    showThis(), 
    Positioned(top: 150, child: Logo())
  ],
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...