No Android match_parent
e wrap_content
são usados para redimensionar os widgets automaticamente em relação ao seu pai para o conteúdo que o widget contém.
No Flutter, parece que por padrão todos os widgets estão configurados para wrap_content
, como eu mudaria para que eu pudesse preencher o seu width
e height
o de seu pai?
Link do artigo original
fonte
crossAxisAlignment
campo em Linhas e Colunas que pode ser configuradoCrossAxisAlignment.stretch
para expandir horizontalmente dentro de uma coluna, por exemploA resposta curta é que o pai não tem um tamanho até que o filho tenha um tamanho.
A forma como o layout funciona no Flutter é que cada widget fornece restrições para cada um de seus filhos, como "você pode ter até esta largura, você deve ser desta altura, você deve ter pelo menos esta largura", ou qualquer outra coisa (especificamente, eles obter uma largura mínima, uma largura máxima, uma altura mínima e uma altura máxima). Cada criança pega essas restrições, faz algo e escolhe um tamanho (largura e altura) que corresponda a essas restrições. Então, uma vez que cada criança tenha feito seu trabalho, o widget pode escolher seu próprio tamanho.
Alguns widgets tentam ser tão grandes quanto os pais permitirem. Alguns widgets tentam ser tão pequenos quanto os pais permitirem. Alguns widgets tentam corresponder a um certo tamanho "natural" (por exemplo, texto, imagens).
Alguns widgets dizem aos filhos que eles podem ter o tamanho que quiserem. Alguns impõem aos filhos as mesmas restrições que receberam dos pais.
fonte
PageView
dentro de aColumn
, com outroColumn
dentro da correntepage
, recebo um erro de renderização, mas posso consertar envolvendo oPageView
dentro de umExpanded
ou aFlexible
. O problema é que essas 2 opções apenas expandem seu filho. Por que não há widget relacionado ao encolhimento e ajuste, como "embrulhar conteúdo", para resolver esse tipo de problema de renderização?Na verdade, existem algumas opções disponíveis:
Você pode usar SizedBox.expand para fazer com que seu widget corresponda às dimensões pais ou SizedBox (largura: double.infinity) para corresponder apenas à largura ou SizedBox (heigth: double.infinity) para corresponder apenas à altura.
Se você deseja um comportamento wrap_content, ele depende do widget pai que você está usando, por exemplo, se você colocar um botão em uma coluna, ele se comportará como wrap_content e para usá-lo como match_parent você pode envolver o botão com um widget expandido ou uma caixa de tamanhos.
Com um ListView, o botão obtém um comportamento match_parent e para obter um comportamento wrap_content você pode envolvê-lo com um widget Flex como Row.
Usar um widget Expandido faz com que um filho de uma Linha, Coluna ou Flex se expanda para preencher o espaço disponível no eixo principal (por exemplo, horizontalmente para uma Linha ou verticalmente para uma Coluna). https://docs.flutter.io/flutter/widgets/Expanded-class.html
Usar um widget Flexível oferece ao filho de uma Linha, Coluna ou Flex a flexibilidade de expandir para preencher o espaço disponível no eixo principal (por exemplo, horizontalmente para uma Linha ou verticalmente para uma Coluna), mas, ao contrário de Expandido, Flexível não exigir que a criança preencha o espaço disponível. https://docs.flutter.io/flutter/widgets/Flexible-class.html
fonte
Uma solução simples:
Se um contêiner tiver apenas um filho de nível superior, você poderá especificar a propriedade de alinhamento para o filho e fornecer a ele qualquer valor disponível. ele preencherá todo o espaço do contêiner.
Outra maneira:
fonte
BoxConstraints.expand(height: 100.0)
funciona muito bem comowidth="match_parent"
equivalente do AndroidUsei esta solução, você tem que definir a altura e largura da sua tela usando o MediaQuery:
fonte
fonte
Use o widget
Wrap
.Para
Column
comportamento semelhante, tente:Para
Row
comportamento semelhante, tente:Para mais informações: Wrap (Flutter Widget)
fonte
Use esta linha de códigos dentro da coluna. Para wrap_content:
mainAxisSize: MainAxisSize.min
Para match_parent:mainAxisSize: MainAxisSize.max
fonte
Na verdade, existe uma maneira muito fácil e simples de fazer isso.
Use o
FractionallySizedBox
widget.Este widget também é muito útil quando você deseja dimensionar seu filho em uma fração do tamanho de seu pai.
fonte
Para fazer um filho preencher seu pai, basta envolvê-lo em um FittedBox
fonte