Widgets de Contêiner no Flutter

Padding

O widget Padding insere espaço ao redor de seu filho. A classe EdgeInsets oferece métodos convenientes para definir preenchimento em diferentes direções.


Padding(
  preenchimento: EdgeInsets.symetric(horizontal: 20.0, vertical: 10.0),
  filho: Text('Conteúdo com preenchimento'),
)

ConstrainedBox e SizedBox

ConstrainedBox aplica restrições adicionais ao widget filho. Por exemplo, para criar um contêiner vermelho com largura máxima e altura mínima de 50 pixels:


ConstrainedBox(
  restricoes: BoxConstraints.expand(largura: 100.0, altura: 50.0),
  filho: Container(
    altura: 5.0,
    filho: CaixaVermelha(),
  ),
)

SizedBox especifica dimensões fixas para o widget filho:


SizedBox(
  largura: 80.0,
  altura: 80.0,
  filho: CaixaVermelha(),
)

DecoratedBox

DecoratedBox desenha uma decoração antes ou depois de seu widget filho, como fundo, borda ou gradiente. A classe BoxDecoration implementa elementos de decoração comuns.


DecoratedBox(
  decoracao: BoxDecoration(
    cor: Colors.azul,
    borda: Border.all(largura: 2.0, cor: Colors.cinza),
    borderRadius: BorderRadius.circular(8.0),
  ),
  posicao: DecorationPosition.fundo,
  filho: Text('Com decoração'),
)

Transform

O widget Transform aplica transformações de matriz ao widget filho. Por exemplo, uma rotação:


Container(
  cor: Colors.preto,
  filho: Transform(
    alinhamento: Alignment.direitaCentro,
    transformacao: Matrix4.rotationZ(0.3),
    filho: Container(
      preenchimento: EdgeInsets.all(8.0),
      cor: Colors.laranja,
      filho: Text('Transformado'),
    ),
  ),
)

Container

Container combina widgets como DecoratedBox, ConstrainedBox, Transform, Padding e Align para cenários complexos. Exemplo com múltiplas configurações:


Container(
  margem: EdgeInsets.only(top: 50.0, esquerda: 120.0),
  restricoes: BoxConstraints.tightFor(largura: 200.0, altura: 150.0),
  decoracao: BoxDecoration(
    gradiente: RadialGradient(
      cores: [Colors.vermelho, Colors.laranja],
      centro: Alignment.topLeft,
      raio: 0.98,
    ),
    sombras: [
      BoxShadow(
        cor: Colors.preto54,
        offset: Offset(2.0, 2.0),
        desfoque: 4.0,
      ),
    ],
  ),
  transformacao: Matrix4.rotationZ(0.2),
  alinhamento: Alignment.centro,
  filho: Text(
    '5.20',
    estilo: TextStyle(cor: Colors.branco, tamanhoFonte: 40.0),
  ),
)

Scaffold, TabBar e Navegação Inferior

A biblioteca Material fornece widgets para estruturar páginas. Scaffold atua como esqueleto de uma rota, facilitando a composição de interfaces com barra de navegação, menus e navegação inferior.

Exemplo de página com barra de navegação, menu de gaveta, navegação inferior e botão de ação flutuante:


class RotaScaffold extends StatefulWidget {
  @override
  _RotaScaffoldState createState() => _RotaScaffoldState();
}

class _RotaScaffoldState extends State<rotascaffold> {
  int _indiceSelecionado = 1;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        titulo: Text('Nome do Aplicativo'),
        acoes: <widget>[
          IconButton(icon: Icon(Icons.share), onPressed: () {}),
        ],
      ),
      drawer: MeuMenu(),
      bottomNavigationBar: BottomNavigationBar(
        itens: <bottomnavigationbaritem>[
          BottomNavigationBarItem(icon: Icon(Icons.home), titulo: Text('Início')),
          BottomNavigationBarItem(icon: Icon(Icons.business), titulo: Text('Negócios')),
          BottomNavigationBarItem(icon: Icon(Icons.school), titulo: Text('Escola')),
        ],
        indiceAtual: _indiceSelecionado,
        corFixa: Colors.azul,
        aoPressionar: _aoPressionarItem,
      ),
      floatingActionButton: FloatingActionButton(
        filho: Icon(Icons.adicionar),
        onPressed: _aoAdicionar,
      ),
    );
  }

  void _aoPressionarItem(int indice) {
    setState(() {
      _indiceSelecionado = indice;
    });
  }

  void _aoAdicionar() {}
}
</bottomnavigationbaritem></widget></rotascaffold>

AppBar

AppBar é uma barra de navegação Material com título, menus e abas. Exemplo com TabBar no rodapé:


TabController _controladorAbas;
List<string> abas = ['Notícias', 'História', 'Imagens'];

@override
void initState() {
  super.initState();
  _controladorAbas = TabController(comprimento: abas.length, sincronizador: this);
}

AppBar(
  titulo: Text('Título'),
  rodape: TabBar(
    controlador: _controladorAbas,
    abas: abas.map((aba) => Aba(texto: aba)).toList(),
  ),
)
</string>

TabBarView

TabBarView sincroniza com TabBar para exibir conteúdo das abas. Exemplo:


Scaffold(
  appBar: AppBar(
    rodape: TabBar(
      controlador: _controladorAbas,
      abas: abas.map((aba) => Aba(texto: aba)).toList(),
    ),
  ),
  corpo: TabBarView(
    controlador: _controladorAbas,
    filhos: abas.map((aba) {
      return Container(
        alinhamento: Alignment.centro,
        filho: Text(aba, fatorEscalaTexto: 5),
      );
    }).toList(),
  ),
)

Drawer

Drawer representa um menu lateral. Exemplo de implementação:


class MeuMenu extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Drawer(
      filho: MediaQuery.removePadding(
        context: context,
        removerTopo: true,
        filho: Coluna(
          crossAxisAlignment: CrossAxisAlignment.inicio,
          filhos: <widget>[
            Padding(
              preenchimento: EdgeInsets.only(top: 38.0),
              filho: Fileira(
                filhos: <widget>[
                  Padding(
                    preenchimento: EdgeInsets.symmetric(horizontal: 16.0),
                    filho: ClipOval(
                      filho: Image.asset('imgs/avatar.png', largura: 80),
                    ),
                  ),
                  Text('Usuário', estilo: TextStyle(pesoFonte: FontWeight.bold)),
                ],
              ),
            ),
            Expandido(
              filho: ListView(
                filhos: <widget>[
                  ListTile(
                    lider: Icon(Icons.adicionar),
                    titulo: Text('Adicionar conta'),
                  ),
                  ListTile(
                    lider: Icon(Icons.configuracoes),
                    titulo: Text('Gerenciar contas'),
                  ),
                ],
              ),
            ),
          ],
        ),
      ),
    );
  }
}
</widget></widget></widget>

FloatingActionButton

FloatingActionButton é um botão Material que flutua na interface para ações comuns.

Navegação Enferior

BottomAppBar permite criar uma barra de navegação inferior com efeito de recorte. Exemplo:


bottomNavigationBar: BottomAppBar(
  cor: Colors.branco,
  forma: CircularNotchedRectangle(),
  filho: Fileira(
    filhos: [
      IconButton(icon: Icon(Icons.home)),
      SizedBox(),
      IconButton(icon: Icon(Icons.business)),
    ],
    mainAxisAlignment: MainAxisAlignment.spaceAround,
  ),
)

O local do recorte depende da posição do FloatingActionButton, como:


floatingActionButtonLocation: FloatingActionButtonLocation.centralDocked,

Tags: Flutter Dart Widgets Contêiner Scaffold

Publicado em 6-23 05:09