Desenvolvimento Flutter
Desenvolvimento Flutter
Desenvolvimento Flutter
Cubatão - SP
2020
AUTORES
CTII 418
CTII 448
Professor Orientador
Disciplina
Projeto de Sistemas
ÍNDICE
DESENVOLVIMENTO FLUTTER 6
APRESENTAÇÃO DA APOSTILA: HISTÓRICO DA FRAMEWORK 6
INTRODUÇÃO 6
OBJETIVO 6
ORIGEM 6
PRINCIPAIS CARACTERÍSTICAS 7
CONCLUSÃO 7
IDES: PRINCIPAIS IDES QUE COMPACTUAM COM FLUTTER 8
ANDROID STUDIO. 8
1. Inspeções com Lint 8
2. Emulador 9
3. Preenchimento Automático de Código 9
VISUAL STUDIO CODE 10
1. IntelliSense 10
2. Debugging 11
3. Comandos Git integrados 12
4. Extensível e personalizável 12
NOSSA DECISÃO 13
ANDROID STUDIO E FLUTTER 14
FAZENDO O DOWNLOAD DA IDE E DO FRAMEWORK 14
1. Visualização dos Requisitos de Instalação. 14
2. Instalação do Git. 15
3. Instalação do Flutter SDK. 23
4. Instalação Do Android Studio 24
5. Integrando o Flutter ao Android Studio 29
6. Criando o emulador 31
APLICAÇÃO DE TESTE 36
CRIANDO UMA APP “HELLO WORLD” 36
APLICAÇÃO 01 - ÁREA DO TRIÂNGULO 38
Layout geral da página Home 38
Código principal da aplicação mobile 39
Código do layout da aplicação 41
Código da aplicação: 41
Como criar classes no Android Studio 44
Criando a classe Erro 44
Criando a classe calculoA 45
Criando a BLLcalculoA 45
Emulador 46
APLICAÇÃO 02 - GPS E LOCALIZAÇÃO DO CELULAR 47
Instalando as API’s necessárias no Google Cloud 47
Criando o código no Android Studio 52
APLICAÇÃO 03 - LISTA DE CONTATOS 57
1. Adicionar Google Fonts no arquivo pubspec.yaml: 57
2. Criar página .dart para a classe Contatos 58
2.1. Criando o File .dart: 58
2.2. Criando a classe “Contatos”: 58
3. Importar a classe Contatos.dart 59
4. Função para instanciar variável dos contatos para o celular 59
5. Configuração do Scaffold (layout) da lista de contatos 60
5.1. APP BAR 60
5.2. CONTAINER 61
5.3. PADDING 61
5.4.CIRCLE AVATAR 62
6. Função para pesquisar contatos na lista 63
7. Resultado final e funcionamento 64
7.1.PÁGINA INICIAL 64
7.2.PESQUISAR CONTATO 65
APLICAÇÃO 04 - BANCO DE DADOS E CRUD SIMPLES 68
1. Quarta aplicação: CRUD para salvar, deletar, consultar e alterar dados em um
banco de dados, referente a tabela de livros usada ao longo do curso: 68
2. A seguir, mostraremos algumas imagens da parte do código, com seus devidos
comentários em cada bloco: 77
CONSIDERAÇÕES FINAIS 83
REFERÊNCIAS BIBLIOGRÁFICAS 84
DESENVOLVIMENTO FLUTTER
INTRODUÇÃO
OBJETIVO
ORIGEM
Em 2014, o projeto foi iniciado com o codinome "Sky", com o propósito de encontrar
um melhor caminho de construir interfaces para o mobile. A proposta, em 2015, foi
apresentada durante a Dart Developer Summit, onde foi possível ver o código Dart
sendo executado em um aparelho Android. A partir desse momento, o programa foi
exibido como Flutter. Após um ano (2016), no mesmo evento, Flutter foi descrito como
"Uma melhor maneira de desenvolvimento mobile".
O Flutter teve sua estreia em um importante evento, no Google IO 2017, onde em uma
sessão de "live coding", o aplicativo elaborado foi integrado, com acesso à câmera,
ao Firebase. No Google IO 2018, o kit de desenvolvimento já teve um destaque maior,
após ultrapassar as expectativas, contou com 3 palestras excepcionais, atendendo a
tópicos como: gerenciamento de estado, uso do Material Design e novamente outra
sessão "live coding" de um aplicativo, acessando o Firebase.
Em dezembro de 2018, foi lançada a versão 1.0 e o principal destaque foi para o
projeto Hummingbird, que após um tempo tornou-se o Flutter para Web. Toda a
configuração da versão 1.0, utilizando o Flutter, foi feita em um aplicativo nativo para
MacOS.
6
PRINCIPAIS CARACTERÍSTICAS
⦁ O Flutter é vantajoso. Ele possibilita que o aplicativo seja operado num smartphone
ou no emulador enquanto o desenvolvedor o programa. O stateful hot reload nada
mais é que a atualização automática e rápida no aparelho quando o desenvolvedor
salva um arquivo no projeto, tornando assim o processo de desenvolvimento mais
proficiente.
⦁ É aberto. Como dito no tópico anterior, o Flutter é open source com licença BSD-
style, que inclui colaborações mundiais de diversos desenvolvedores.
CONCLUSÃO
Conclui-se, portanto, que desde seu lançamento o Flutter vem se aprimorando para
manter seu lema de ser a melhor maneira de desenvolvimento mobile, para isso
ampliasse no conjunto de métodos do Google com a expansão da linguagem Dart, se
tornando cada dia mais didático, diversificado, ágil e flexível tanto para o operador
quanto para o programador.
7
IDES: PRINCIPAIS IDES QUE COMPACTUAM COM FLUTTER
Podemos construir aplicativos com Flutter usando qualquer editor de texto combinado
com ferramentas de linha de comando. No entanto, é recomendado o uso de um dos
seguintes plug-ins de editor para uma experiência ainda melhor, pois eles fornecem
IntelliSense (completar automaticamente códigos), destaque de sintaxe, assistências
de edição de widget, suporte para execução e depuração e muito mais.
São eles IntelliJ, Android Studio e VS Code, porém focaremos nos dois últimos
principais no quesito desenvolvimento de aplicativos mobile.
ANDROID STUDIO.
8
Recurso de inspeção Lint.
2. Emulador
9
Tipos de preenchimento automático de código.
Principais características:
1. IntelliSense
10
Ferramenta de preenchimento automático IntelliSense.
Fonte: site Visual Studio Code, 27 de setembro de 2020.
2. Debugging
11
Um dos principais recursos do Visual Studio Code é seu excelente suporte à
depuração. O depurador embutido do VS Code ajuda a acelerar seu loop de edição,
compilação e depuração.
Comandos Git.
Fonte: site Visual Studio Code, 27 de setembro de 2020.
Trabalhar com Git e outros provedores de SCM nunca foi tão fácil. Com o VS Code
podemos revisar diffs, prepare arquivos e faça commits direto do editor.
4. Extensível e personalizável
12
Quer ainda mais recursos? Instale extensões para adicionar novos idiomas, temas,
depuradores e para se conectar a serviços adicionais. As extensões são executadas
em processos separados, garantindo que não deixem seu editor lento
NOSSA DECISÃO
Pesquisando sobre essas duas IDEs mais famosas chegamos a conclusão de usar o
Android Studio para a realização dos aplicativos.
13
ANDROID STUDIO E FLUTTER
14
Printscreen de tela feito por Gabriel Ribeiro Antunes.
2. Instalação do Git.
15
Printscreen de tela feito por Gabriel Ribeiro Antunes.
16
Printscreen de tela feito por Gabriel Ribeiro Antunes.
Para as próximas telas é recomendado clicar apenas em “Next >” a menos que o
usuário visualize algo que deseje alterar.
17
18
19
20
21
Printscreens de tela feito por Gabriel Ribeiro Antunes.
22
Printscreen de tela feito por Gabriel Ribeiro Antunes.
Está finalizada a instalação do Git. Vá em “Next >” para fechar a tela de instalação.
23
Printscreen de tela feito por Gabriel Ribeiro Antunes.
24
Após aparecer a tela a seguir, selecione “Li e aceito os Termos e Condições acima”
e, depois, clique em “fazer o download de Android Studio para Windows”.
25
Clique em “Next >”.
Clique em “Install”.
26
Download finalizado, clique em “Next >” e depois na opção “Finish” para iniciar o
Android Studio.
27
Aparecendo essa tela, clique em “Next >” e depois escolha o tipo de setup de sua
preferência e clique em “Next >”. Após isso, escolha o tema de sua preferência e clique
em “Next >” novamente.
28
Aguarde aparecer a tela abaixo e, assim, o download foi finalizado.
29
Depois, pesquise por “Flutter” e clique em “Install”. Espere finalizar.
Após ambas instaladas, clique no botão “Restart IDE” da extensão Flutter. O aplicativo
irá iniciar e deparar-se nessa página:
Clique em “Start a new Flutter project”. Nomeie a aplicação e depois clique em “Next
>” até abrir a página home do projeto.
30
Essa é a página home do projeto. Instalado!
6. Criando o emulador
35
APLICAÇÃO DE TESTE
CRIANDO UMA APP “HELLO WORLD”
1. No canto esquerdo superior da página inicial, clique em File -> New Flutter
Project e ao abrir, escreva o código abaixo:
36
37
APLICAÇÃO 01 - ÁREA DO TRIÂNGULO
Levando em conta que já ensinamos, no início desta apostila, a como criar um projeto
e como inserir o emulador mobile nele, iremos partir para o próximo passo: criar um
exemplo de aplicação mobile rodável.
Escolhemos, então, uma aplicação para calcular a área de um triângulo, cuja base e
altura deverão ser digitadas pelo usuário. Leia o passo-a-passo abaixo:
1. Primeira aplicação mobile: a app para calcular a área do triângulo cuja base
e altura devem ser digitadas pelo usuário.
No print screen acima, temos o código do layout geral da página única de nossa
aplicação, onde consta seu título title e seu tema theme, no qual este último está
inserido a escolha de cor Colors do detalhe do layout, que, neste caso, é azul blue.
38
Código principal da aplicação mobile
Esse bloco é responsável para importar as classe que vamos criar futuramente e
importar outros packages necessários para o design do app, como o materal.dart.
import 'package:area_triangulo/BLLcalculoA.dart' ;
import 'package:flutter/material.dart';
import 'calculoA.dart';
import 'erro.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
39
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: MyHomePage(title: 'Área do triângulo'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
void calcularA() {
setState(() {
calculoA calc = calculoA();
calc.valorB = controleB.text;
calc.valorH = controleH.text;
BLLcalculoA.validaDados(calc);
if(Erro.error){
resposta = Erro.msg;
} else {
area = calc.area;
return resposta = area;
40
}
}
);
}
Código da aplicação:
@override
Widget build(BuildContext context) {
return Scaffold(
//Widget necessário para o layout do flutter, contendo o conteúdo que será mostrado
na tela
body: Center(
// o widget Center ocupa toda a área possível
child: Column(
// adicionamos Column para organizar os filhos (children) um abaixo do outro
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Row(
// adicionamos Row para organizar os filhos (children) um ao lado do outro
children: [
Text(
// adicionamos Text para orientar o usuário o que escrever no TextField
'Digite a base do triângulo:',
),
Container(
41
//criamos um Container para declarar um TextField que seria filho (child) com
um tamanho (width) de
// 100px, porque os TextField precisam de um tamanho
width: 100,
child: TextField(
//TextField para o usuário inserir valores
controller: controleB,
),
),
],
),
Row(
// adicionamos Row para organizar os filhos (children) um ao lado do outro
children: [
Text(
// adicionamos Text para orientar o usuário o que escrever no TextField
'Digite a altura do triângulo:',
),
Container(
//criamos um Container para declarar um TextField que seria filho (child) com
um tamanho (width) de
// 100px, porque os TextField precisam de um tamanho
width: 100,
child: TextField(
//TextField para o usuário inserir valores
controller: controleH,
keyboardType: TextInputType.number,
),
),
],
),
FlatButton(
// Esse Widget seria um botão, que quando apertado, chamaria a função calcularA
(para calcular a área)
// e tem como filho (child) um Text, que seria o texto que aparece no botão
42
onPressed: calcularA,
child: Text('Calcular')
),
Row(
// adicionamos Row para organizar os filhos (children) um ao lado do outro
children: [
Text(
//indicamos o que está escrito ao lado
'Sua área é:',
),
Text('$resposta' //mostramos a área por meio desse Text
),
],
),
],
),
),
);
}
}
43
Como criar classes no Android Studio
Essa é uma classe para retornar uma mensagem quando erro for verdadeiro, pode se
ver a demonstração e aplicação na função calculoA.
class Erro {
static bool _erro;
static String _mens;
44
Criando a classe calculoA
Essa classe é responsável para receber os valores da altura e base e efetuar o cálculo
da área e retorná-la. Podemos ver sua aplicação na função calculoA, onde essa classe
é chamada.
class calculoA {
String _h, _b;
Criando a BLLcalculoA
Essa é uma camada para verificação dos dados, para ver se o usuário digitou um
número do tipo double.
import 'erro.dart';
import 'calculoA.dart';
class BLLcalculoA{
static validaDados(calculoA calc){
Erro.error = false;
if(calc.h.length == 0){
Erro.msg = "O campo da altura é de preenchimento obrigatório";
}else{
try{
45
double.parse(calc.h);
}
catch(id){
Erro.msg = "O campo de ALTURA deve ser numérico";
return;
}
}
if(calc.b.length == 0){
Erro.msg = "O campo de BASE é de preenchimento obrigatório";
}else{
try{
double.parse(calc.b);
}
catch(id){
Erro.msg = "O campo BASE deve ser numérico";
return;
}
}
}
}
Emulador
Após finalizarmos tudo isso, a nossa aplicação mobile rodará no emulador desta forma
aqui apresentada:
46
APLICAÇÃO 02 - GPS E LOCALIZAÇÃO DO CELULAR
1. O primeiro passo a se realizar para uma aplicação com Google Maps é acessar a
plataforma da Google Cloud através do endereço console.cloud.google.com e fazer
o login com a sua conta da Google.
47
2. Ao se conectar, informe seu país, concorde com os termos de uso e clique em
concordar e continuar.
48
4. Após o preenchimento de dados pessoais é necessário inserir os dados de um
cartão de débito ou crédito. Mas fique tranquilo, eles explicam que nenhuma
cobrança automática será feita após o término do período de teste gratuito e
solicitem seu cartão de crédito para ter certeza de que você não é um robô. Você
não será cobrado, a menos que atualize manualmente para uma conta paga.
5.1
49
5.2
5.3
50
7. Agora devemos habilitar os mapas, como estamos criando uma aplicação para
android, vamos habilitar a biblioteca para android em “Maps SDK para Android”.
51
Criando o código no Android Studio
52
3.Agora iremos adicionar algumas configurações de mapa para o Android.
Para isso iremos em Android > App > Src > Main e a abrir o arquivo
AndroidManifest.xml.
5. Para obter uma chave devemos voltar ao Google Cloud e seguir por API’s e
Serviços> Credenciais.
53
5.1. E posteriormente em Criar Credenciais > Chave de API
54
6. Agora que configuramos vamos criar um novo arquivo em lib denominado
google.Maps.dar que será nossa página de mapas. E nele adicionaremos um
StatefulWidget.
7. Para que seja trabalhado um mapa, onde consigamos dar zoom e trocar
localizações, adicionamos um controller “mapcontroller”.
● instanciamento do marcador:
55
7.2. Após a criação de um marcador e do controle fazemos a ligação do
controle com o mapa na linha a seguir:
9. Para que seja feito um teste atribuímos valores fixos a longitude e latitude,
lembrando que foi criado uma caixa de texto onde o usuário digitaria o seu
local de pesquisa assim o “text field” (a caixa de texto) atribuiria os
respectivos valores daquele local pesquisando as latitudes e longitudes no
google, porém fora atribuído valores as essas variáveis para a simplificação. .
● atribuição/instanciamento de valores
56
10. Para que toda vez que o usuário toque na tela ou movimente a câmera
recebessemos os dados, utilizamos os seguintes dados:
● toque na tela
● movimentação da câmera.
PASSO A PASSO
Agora vamos iniciar a nossa terceira aplicação de Flutter e nela iremos abordar uma
lista de contatos de um dispositivo mobile. O objetivo desse app é gerar uma lista de
contatos no celular por meio de POO e, após isso, criar um mecanismo de pesquisa
para localizar algum contato dessa lista. Vamos para o passo a passo:
57
2. Criar página .dart para a classe Contatos
file’. Depois nomeie o arquivo com o mesmo nome da classe que será utilizada.
58
Crie a classe utilizando o termo “final”, indicando o nome da variável que
acomodam todos os contatos da lista, bem como seus nomes. Deste modo
abaixo:
arquivo “main.dart”:
59
Após isso, é necessário inserir todos os dados no armazenamento da variável.
Para isso, a conectamos com a classe Contatos que fora criada, a partir do método
O Scaffold é o lugar onde iremos setar e configurar todo o layout (design, parte
visual) da nossa lista de contatos. É claro: grande parte desses atributos são
Vamos lá:
É a barra da lista de contatos que se encontra no topo da página inicial. Ela que
60
5.2. CONTAINER
5.3. PADDING
São os contatos, os itens contidos na nossa lista. Foram configurados com o icon de
usuário ao lado esquerdo, simulando uma lista de contatos comum dos dispositivos:
61
5.4.CIRCLE AVATAR
Veja a codificação dos atributos e características da lista nos print screens abaixo:
62
6. Função para pesquisar contatos na lista
Agora, vamos para a parte não menos importante do projeto: a função de pesquisar
os contatos! Iremos utilizar uma estrutura if: else: para chegar se a barra de pesquisa
A lógica usada é a seguinte: será pesquisado para cada elemento da lista o conteúdo
63
Se por acaso não houver contato correspondente ao conteúdo digitado, o curso se
direciona para o else que retornará uma lista vazia como forma de avisar que nada
fora encontrado.
7.1.PÁGINA INICIAL
64
7.2.PESQUISAR CONTATO
Na barra de pesquisa que foi feita, você pode testar a aplicação enquanto ela
65
66
A seguir, você pode observar mais dos códigos utilizados na página inicial geral da
67
APLICAÇÃO 04 - BANCO DE DADOS E CRUD SIMPLES
68
1.3. Clicar no ícone Android, que se encontra ao lado do IOS, dentre as opções.
69
1.5. No projeto, ir em android>app>src>build.gradle
70
1.8. Após registrar o aplicativo, deve-se fazer o download do google-
services.json, que um auxiliar de início rápido para integrar rapidamente os
serviços do Google ao seu aplicativo.
71
1.10. Copiar a classpath
72
1.15. Siga clicando em "Próximas".
73
1.18. Clique em "Criar banco de dados".
74
1.20. Clique em "Ativar"
75
1.21. Clique em "Regras", mais acima na tela.
1.23. No site "pub.dev", procure por "Cloud Firestore", clique na primeira opção
e vá para Installing, e em seguida copie a linha "cloud_firestore: ^0.16.0"
76
1.24. No projeto, vá em test>pubspec.yaml.
77
Imagem Classe “livro: Classe que define se o livro foi lido ou não.
78
79
80
Imagem Classe “loading”: Classe que define que os dados estão chegando à tela,
utilizada em main.
Esse projeto foi titulado como um trabalho de conclusão de curso (TCC) a ser
apresentado na nossa formatura do curso técnico integrado de Informática, no campus
do IFSP Cubatão. Então, além da extrema responsabilidade de reunir os nossos
aprendizados e transmiti-los nesse documento, também ficamos cientes do
compromisso em espalhar todo o conhecimento de Flutter e aplicação mobile para os
não veteranos nesse assunto.
Desejamos todo o sucesso para a sua vida e agradecemos a atenção e o apoio que
você empenhou nessa jornada! Até uma próxima aventura de programação.
83
REFERÊNCIAS BIBLIOGRÁFICAS
ALENCAR, Jayr. "O que é Flutter?" Clube dos Geeks. Disponível em:
http://clubedosgeeks.com.br/programacao/o-que-e-o-flutter. Acesso em 27 de
setembro de 2020.
MELO, Rubens de. "O que é Flutter?" Flutter para iniciantes. Disponível em:
https://www.flutterparainiciantes.com.br/o-que-e-flutter. Acesso em 27 de setembro de
2020.
ANDRADE, Ana Paula de. "O que é Flutter?"; Blog da TreinaWeb. Disponível em:
https://www.treinaweb.com.br/blog/o-que-e-flutter/. Acesso em 27 de setembro de
2020.
Canal “Code like Ice” no Youtube. “Flutter - Contact List App - Part 1”. Disponível em:
https://www.youtube.com/watch?v=cAQVNn6pCq8. Acesso feito em 09 de janeiro de
2021.
84
85