DEV Community

Willane Paiva
Willane Paiva

Posted on

6

Widgets essenciais do flutter

O flutter funciona combinando widgets como se fossem legos para conseguir um determinado layout. Neste artigo, irei apresentar alguns widgets que permitem construir uma variedade de telas quando combinados.

Widgets essenciais

Text

Text renderiza um texto na tela, onde o texto pode ser dinâmico ou estático. É possível customizar o estilo, mudando várias propriedades como fonte, peso, além de definir como o texto será tratado em caso de overflow, se irá dar wrap entre outros.

Exemplo com texto estático

Text('olá mundo');
Enter fullscreen mode Exit fullscreen mode

Exemplo com dado dinâmico

const greeting = (name) => 'Olá, $name';

Text(greeting('Maria'));
Enter fullscreen mode Exit fullscreen mode

Renderização de um widget Text no flutter

Container

O Container é um widget que possui apenas um filho e pode ter diferentes propriedades, como color que pode ser usada para pintar o fundo e decoration que nos permite criar bordas, é possível usar color ou decoration, um de cada vez.

Exemplo usando cor de fundo:

Container(
    color: Colors.red,
  child: Text('Container'),
);
Enter fullscreen mode Exit fullscreen mode

Exemplo usando decoration para definir a cor de fundo:

Container(
        decoration: BoxDecoration(
          color: Colors.red,
        ),
        child: const Text('Container'),
);
Enter fullscreen mode Exit fullscreen mode

Renderização de um widget Container vermelho com texto Container no flutter

SizedBox

SizedBox é um widget que nos permite criar um widget com altura, largura ou ambos fixos. É um widget que tem apenas uma criança que é opcional.

SizedBox(height: 6);
Enter fullscreen mode Exit fullscreen mode

Renderização de um sized box no flutter

Padding

O Padding é um widget que cria espaço dentro de um widget, similar ao padding do CSS.

Padding(
    padding: EdgeInsets.all(16),
    child: Text('Widget A'),
);
Enter fullscreen mode Exit fullscreen mode

Exemplo de uso do Padding no flutter

Column

Column é um widget que empilha os widgets verticalmente. É um widget do tipo flex, então toma todo o espaço que tiver sobrando.

Exemplo de uso:

Column(
  children: [
        Container(color: Colors.red),
        Container(color: Colors.blue),
    ],
);
Enter fullscreen mode Exit fullscreen mode

Exemplo mais completo:

class MyWidget extends StatelessWidget {
  const MyWidget({super.key});

  @override
  Widget build(BuildContext context) {
    return SizedBox(
      height: 620,
      child: Column(
        mainAxisAlignment: MainAxisAlignment.spaceBetween,
        crossAxisAlignment: CrossAxisAlignment.stretch,
        children: [
          Container(
            height: 150,
            alignment: Alignment.center,
            child: const Text('Widget A'),
          ),
          const Divider(
            height: 1,
            color: Colors.black,
          ),
          Container(
            height: 150,
            alignment: Alignment.center,
            child: const Text('Widget B'),
          ),
          const Divider(
            height: 1,
            color: Colors.black,
          ),
          Container(
            height: 150,
            alignment: Alignment.center,
            child: const Text('Widget C'),
          ),
          const Divider(
            height: 1,
            color: Colors.black,
          ),
          Container(
            height: 150,
            alignment: Alignment.center,
            child: const Text('Widget D'),
          ),
          const Divider(
            height: 1,
            color: Colors.black,
          ),
        ],
      ),
    );
  }
}
Enter fullscreen mode Exit fullscreen mode

Renderização de widget de column

Row

Similar ao Column, o Row empilha os itens horizontalmente.

Row(
  children: [
        Container(color: Colors.red),
        Container(color: Colors.blue),
    ],
);
Enter fullscreen mode Exit fullscreen mode

Exemplo mais completo:

class MyWidget extends StatelessWidget {
  const MyWidget({super.key});

  @override
  Widget build(BuildContext context) {
    return Container(
      height: 300,
      width: 600,
      decoration: BoxDecoration(border: Border.all()),
      child: Row(
        mainAxisAlignment: MainAxisAlignment.spaceBetween,
        crossAxisAlignment: CrossAxisAlignment.stretch,
        children: [
          Container(
            width: 150,
            alignment: Alignment.center,
            child: const Text('Widget A'),
          ),
          Container(
            width: 1,
            color: Colors.black,
          ),
          Container(
            width: 150,
            alignment: Alignment.center,
            child: const Text('Widget B'),
          ),
          Container(
            width: 1,
            color: Colors.black,
          ),
          Container(
            width: 150,
            alignment: Alignment.center,
            child: const Text('Widget C'),
          ),
          Container(
            width: 1,
            color: Colors.black,
          ),
        ],
      ),
    );
  }
}


Enter fullscreen mode Exit fullscreen mode

Renderização de widget de row

SingleChildScrolView

SingleChildScrollView cria um widget rolável com apenas um filho, útil quando o tamanho do filho é dinâmico.

Exemplo de uso

SingleChildScrollView(
    child: Text('long text here')
);
Enter fullscreen mode Exit fullscreen mode

Exemplo mais completo

class MyWidget extends StatelessWidget {
  const MyWidget({super.key});

  @override
  Widget build(BuildContext context) {
    return SingleChildScrollView(
      child: SizedBox(
        height: MediaQuery.of(context).size.height * 2,
        child: Column(
          mainAxisAlignment: MainAxisAlignment.spaceBetween,
          crossAxisAlignment: CrossAxisAlignment.stretch,
          mainAxisSize: MainAxisSize.min,
          children: [
            Flexible(
              child: Container(
                color: Colors.blue,
                alignment: Alignment.center,
                child: const Text('Widget A'),
              ),
            ),
            Flexible(
              child: Container(
                color: Colors.green,
                alignment: Alignment.center,
                child: const Text('Widget B'),
              ),
            ),
            Flexible(
              child: Container(
                color: Colors.yellow,
                alignment: Alignment.center,
                child: const Text('Widget C'),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

Enter fullscreen mode Exit fullscreen mode

Renderização de SingleChildScrollView no flutter

Referência

Documentação do Flutter

Hostinger image

Get n8n VPS hosting 3x cheaper than a cloud solution

Get fast, easy, secure n8n VPS hosting from $4.99/mo at Hostinger. Automate any workflow using a pre-installed n8n application and no-code customization.

Start now

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay