Почему я должен использовать [Expanded] / [Flexible] flex вместо [Align] выравнивания?

Мне было интересно, почему нужно использовать [Expanded] / [Flexible] flex вместо [Align] выравнивания? Вы можете точно выровнять свой виджет с помощью [Выровнять] и даже потенциально избежать [Padding].

Давайте посмотрим на это с другой точки зрения. Является ли использование гибкости [Expanded] / [Flexible] более эффективным и быстрым, чем [Align]?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
72
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Не уверен, что вы имеете в виду. Expanded предназначен для (более или менее) «выбора», какой виджет внутри Row/Column должен заполнить оставшееся пространство. В то время как Align просто позиционирует дочерний элемент внутри себя по заданному выравниванию.

Например, я должен использовать Expanded + Align, если я хочу что-то выровнять, иначе это не влияет на это. Интересно, это лучше, чем Expanded (flex) + Padding?

Jack O'Neill 08.04.2019 00:13

Это сбивает с толку... можете ли вы показать пример кода? не уверен, что вы имеете в виду под «это не влияет».. наличие Expanded внутри Row/Column всегда должно иметь эффект

Herbert Poul 08.04.2019 00:17

Я имею в виду, что я не могу использовать виджет «Выравнивание» отдельно в виджете «Столбец», потому что ничего не происходит, пока я не оберну вокруг него виджет «Расширенный». Любая причина для этого?

Jack O'Neill 08.04.2019 00:24

конечно, да .. если у вас есть Column с crossAxisAlignment = CrossAxisAlignment.stretch и у вас есть Align(child: Text('blubb')) он будет горизонтально центрировать ваш текстовый виджет 'blubb'.

Herbert Poul 08.04.2019 00:26

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

Herbert Poul 08.04.2019 00:27

к вашему сведению, из документации Align: «Если размер не ограничен, а соответствующий коэффициент размера равен нулю, тогда виджет будет соответствовать размеру своего дочернего элемента в этом измерении» - Column не имеет ограничений по вертикали, поэтому Align будет соответствовать размеру дочернего элемента.

Herbert Poul 08.04.2019 00:28

Это хорошо работает с одним Expanded, но если я использую его на всех Aligns, возникают ошибки. Как я могу ограничить столбец максимальным доступным размером, а затем использовать в нем выравнивание?

Jack O'Neill 08.04.2019 00:29

Я дал вам правильный ответ, потому что вы разъяснили его для меня.

Jack O'Neill 08.04.2019 00:30

Извините, я действительно не понимаю, чего вы хотите добиться. Может быть, попробуйте описать, как вы хотите, чтобы ваши виджеты были расположены, а не пытаться объяснить «баги» в рамках того, как, по вашему мнению, они должны себя вести.

Herbert Poul 08.04.2019 00:38

Я предлагаю использовать несколько выравниваний в столбце, я спрашиваю вас, как мне это удалось сделать?

Jack O'Neill 08.04.2019 00:56

Почему вы хотите использовать несколько виджетов Align внутри Column? Вы уже знаете, «как» это сделать.. просто поместите их в список widgets.. Я предполагаю, что это не приведет к макету, который вы себе представляете.. но я понятия не имею, какой макет вы хотите получить.. (как в моем предыдущий пример, если у вас есть Column(crossAxisAlignment = CrossAxisAlignment.stretch) с двумя Align(alignment=..centerRight, child=Text('asdf')), Align(alignment=centerRight, child=Text('asdf')) ... оба текстовых поля будут выровнены по правому краю... т. е. оба Align работают внутри одного Column

Herbert Poul 08.04.2019 00:59

Спасибо за комментарий, я намерен выровнять их по вертикали, потому что отступы не учитываются моей границей оформления ввода. В итоге я использовал Spacer() между виджетами вместо Padding.

Jack O'Neill 08.04.2019 01:00

Нет никакого сравнения между Expanded/Flex и Align. Взгляните на следующий фрагмент.

 Column(
  children: [
    Container(color: Colors.blue, height: 200),
    Align(child: Container(color: Colors.green)), // doesn't show anything
    Expanded(child: Container(color: Colors.orange)), // shows up in the remaining space
  ],
);

Наличие Align в качестве родителя Container ничего не покажет на экране, но если вы используете Expanded/Flex, оно займет левое пространство.

@TheUniqueProgrammer Да, тогда это покажет, я просто хотел показать разницу между этими двумя виджетами, заданную OP, на примере.

CopsOnRoad 09.04.2019 12:29

Ну, это не показывает разницу, поскольку @TheUniqueProgrammer показал, что это то же самое, когда используется Expanded + Align.

Jack O'Neill 11.04.2019 00:08

Другие вопросы по теме