Flutter - Widgets Básicos
Este artigo apresenta um resumo dos principais Widgets básicos usados nas aplicações Flutter. |
|
O que é o Flutter ?
O Flutter é um SDK de aplicativo móvel do Google que ajuda a criar aplicativos móveis modernos para iOS e Android usando uma única (quase) base de código.
Se você não conhece o Flutter veja o meu artigo : Flutter - Primeiros contatos e impressões
Usando os Widgets básicos
No Flutter quase tudo são widgets. Então vamos falar um pouco sobre eles.
Os
Widgets são imutáveis. Ou seja, eles não podem ser
alterados. Quaisquer propriedades que eles contêm são finais e só podem ser
definidas quando o widget for inicializado. Isso os mantém leves, de modo que é
barato recriá-los quando a árvore de widgets for alterada.
Existem dois tipos de widgets: 1) sem estado ou
StatelessWidget e 2) com estado ou StatefulWidget
1-) Widgets sem estado são widgets que não armazenam nenhum estado. Ou seja, eles não armazenam valores que podem mudar. Por exemplo, um ícone é sem estado; você define a imagem do ícone quando a cria e depois não muda mais. Um widget de texto também é sem estado.
Você pode
dizer: "Mas espere, você pode alterar o valor do texto". É verdade, mas
se você quiser alterar o valor do texto, basta criar um novo widget inteiro com
o novo texto. O widget Text não armazena uma
propriedade de texto que pode ser alterada.
2-) O segundo tipo de widget é chamado de widget com
estado. Isso significa que ele pode acompanhar as alterações e atualizar
a interface do usuário com base nessas alterações.
Assim ao criar uma aplicação Flutter geralmente vamos utilizar widgets para a estrutura base da nossa aplicação.
Na documentação do Flutter podemos consultar os widgets básicos no link a seguir: https://flutter.dev/docs/development/ui/widgets/basics
Abaixo um resumo dos principais Widgets usados:
1- Scaffold
O widget
Scaffold implementa o layout visual básico do
Material Design, permitindo
adicionar facilmente
vários widgets como AppBar, BottomAppBar, FloatingActionButton, Drawer,
SnackBar, BottomSheet e muito mais.
2- SafeArea
O widget SafeArea é necessário para os dispositivos atuais, como o iPhone X ou Dispositivos Android com um entalhe (um recorte parcial que obscurece a tela geralmente localizada em a parte superior do dispositivo).
void
main() => runApp(MyApp());
class
MyApp extends
StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: SafeArea(
child:Center(
child: Column(
children: [
Text('Ola
Pessoal !!!', style: TextStyle(fontSize: 40),)
],
),
))));
}
}
|
O widget SafeArea adiciona automaticamente preenchimento suficiente ao widget filho para evitar invasões do sistema operacional. Opcionalmente, você pode passar um quantidade mínima de preenchimento ou um valor booleano para não aplicar preenchimento na parte superior, inferior, esquerda ou direita.
3- Container
O widget Container é um widget muito usado que permite a personalização do
seu widget filho. Você pode adicionar facilmente propriedades como cor, largura,
altura, preenchimento, margem, borda, restrição, alinhamento, transformação (como girar ou dimensionar o widget), e muitos outros. A propriedade
child é
opcional e o widget Container pode ser usado como um espaço reservado vazio
(invisível) para adicionar espaço entre os widgets.
import 'package:flutter/material.dart';
void main() {
runApp(
Container(
color: Colors.blue,
),
);
}
|
4- Text
O widget Text é usado para exibir uma sequência de caracteres. O
construtor Text usa os argumentos string, style, maxLines, overflow, textAlign
e outros. Um construtor é usado para transmitir os argumentos para inicializar e
customizar o widget Text.
Text(
|
const Text.rich( |
5- RichText
O widget RichText é uma ótima maneira de exibir
texto usando vários estilos. Este widget usa TextSpans como
widget filhos para estilizar
diferentes partes das strings.
RichText(
text: TextSpan(
text: 'Ola ',
style: DefaultTextStyle.of(context).style,
children: <TextSpan>[
TextSpan(text: 'bold', style: TextStyle(fontWeight: FontWeight.bold)),
TextSpan(text: ' Mundo !'),
],
),
)
|
6- Column
O widget Column exibe seus filhos verticalmente. É necessária uma
propriedade children contendo uma matriz de
<Widget>, o que significa que você
pode adicionar vários widgets. Os filhos alinham
verticalmente sem ocupar toda a altura da tela.
Cada widget filho pode ser incorporado em um widget Expanded para preencher o espaço disponível. Podemos usar CrossAxisAlignment, MainAxisAlignment e MainAxisSize para alinhar e dimensionar a quantidade de espaço ocupado no eixo principal.
Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
mainAxisSize: MainAxisSize.max,
children: <Widget>[
Text('Coluna 1'),
Divider(),
Text('Coluna 2'),
Divider(),
Text('Coluna 3'),
],
),
|
7- Row
Um widget Row exibe seus filhos horizontalmente.
Usa uma propriedade
children contendo uma matriz de <Widget>. As mesmas propriedades que a coluna
contém são aplicadas ao Widget Row com a exceção de que o alinhamento é
horizontal, não vertical.
Row(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
mainAxisSize: MainAxisSize.max,
children: <Widget>[
Row(
children: <Widget>[
Text('Linha 1'),
Padding(padding: EdgeInsets.all(16.0),),
Text('Linha 2'),
Padding(padding: EdgeInsets.all(16.0),),
Text('Linha 3'),
],
),
],
),
|
8- Button
O widget Button é muito usado e o Flutter tem vários tipos de widgets
Buttons como :
Abaixo um código exemplo mostrando um exemplo de FlatButton:
FlatButton(
color: Colors.blue,
textColor: Colors.white,
disabledColor: Colors.grey,
disabledTextColor: Colors.black,
padding: EdgeInsets.all(8.0),
splashColor: Colors.blueAccent,
onPressed: () {
/*...*/
},
child: Text(
"FlatButton",
style: TextStyle(fontSize: 20.0),
),
) |
Geralmente é obrigatório definição do evento onPressed para gerenciar a ação do usuário.
9- Image
Usamos este widget para exibir imagens, sendo que os formatos suportados são
JPEG, PNG, GIF, GIF animado, WebP, WebP Animado, BMP e
WBMP, e, podemos exibir imagens locais e
imagens remotas, obtidas a partir de uma url.
Dessa forma o widget Image nos permite exibir uma imagem dentro de nossa interface de usuário através de vários meios diferentes. A seguir temos os construtores usados para exibir imagens:
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('Exibindo imagem local')),
body: Column(
children: <Widget>[
Image.asset(
'imagens/logomac.png',
),
Text('Macoratti.net')
],
),
),
);
}
}
|
10- Icon
Podemos usar o widget Icon para definir widget gráfico desenhado com um glifo de uma fonte descrita em um IconData.
import "package:flutter/material.dart";
import 'package:flutter_widgets/const/_const.dart';
class IconPage extends StatefulWidget {
@override
_IconState createState() => _IconState();
}
class _IconState extends State<IconPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(PageName.ICON),
),
body: SingleChildScrollView(
child: Column(
children: <Widget>[
Icon(
Icons.ac_unit,
size: 100,
color: RED,
),
Icon(
Icons.build,
size: 200,
color: PURPLE,
textDirection: TextDirection.ltr,
),
Icon(
Icons.build,
size: 200,
color: BLUE_DEEP,
textDirection: TextDirection.rtl,
)
],
),
),
);
}
}
|
Apresentamos um resumo dos principais widgets básicos usados no Flutter com um trecho de código destacando as principais propriedades/métodos usadas com o widget.
Para saber mais acompanhe os artigos na seção Flutter e as vídeo aulas do meu canal no Youtube : Jose Carlos Macoratti - YouTube
E estamos conversados...
"E Jesus
clamou, e disse: Quem crê em mim, crê, não em mim, mas naquele que me enviou.
E quem me vê a mim, vê aquele que me enviou.
Eu sou a luz que vim ao mundo, para que todo aquele que crê em mim não permaneça
nas trevas."
João 12:44-46
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
Flutter - Apresentando o widget MaterialApp - Macoratti
Flutter - Apresentando Flutter Studio - Macoratti
Flutter - Lista Básica - Macoratti
Flutter - Apresentando Widgets - Macoratti
Flutter - Obtendo dados da Web - Macoratti