Alura > Cursos de Mobile > Cursos de Flutter > Conteúdos de Flutter > Primeiras aulas do curso Dart: trabalhando com a sintaxe e configuração de projeto

Dart: trabalhando com a sintaxe e configuração de projeto

Criando um projeto com Dart - Apresentação

Olá, meu nome é Matheus, sou instrutor na Alura, e vou acompanhar você durante este curso.

Audiodescrição: Matheus Alberto é um homem de pele clara de cabelos curtos, lisos e castanho-escuros. Tem o rosto oval, sobrancelhas grossas com um corte vertical na sobrancelha direita. Tem olhos castanho-escuros, nariz e boca de tamanho médio. Está com uma camiseta preta. Ao fundo, os estúdios da Alura: uma parede lisa iluminada em tons de roxo e uma estante com livros, quadros e figuras de ação na temática geek.

O que aprenderemos?

Neste curso, desenvolveremos três projetos.

O primeiro projeto servirá para conhecer os fundamentos do Dart. Como inicializamos um projeto em Dart? Qual é o mínimo necessário para um projeto rodar?

Também criaremos interatividades com o terminal, enviando mensagens e capturando informações da pessoa usuária. Por exemplo, ao enviar o nome "Matheus", receberemos a seguinte mensagem de volta:

"Muito prazer, Matheus. Vamos fazer vários programas juntos!"

O segundo projeto será uma calculadora. Com ela, conheceremos:

Teremos uma calculadora na qual podemos inserir o primeiro valor, digitar uma operação, como, por exemplo, soma, e um segundo valor, obtendo o resultado dessa operação.

Com as condicionais, também lidaremos com erros. Por exemplo, se digitamos o primeiro valor corretamente, mas a operação for inválida, receberemos uma mensagem de erro, solicitando à pessoa usuária que insira uma nova operação válida.

Digitando a operação válida, prosseguiremos com a aplicação e obteremos o resultado.

No terceiro projeto, reuniremos todo o conhecimento que adquirimos até o momento em uma aplicação de notas. Nela, aprenderemos:

Como resultado, poderemos adicionar uma nota, listar notas ou sair da aplicação.

Pré-requisitos

Para seguir com este curso, é muito importante ter conhecimentos básicos de lógica de programação.

Esperamos você na primeira aula!

Criando um projeto com Dart - Criando o primeiro projeto em Dart

Vamos começar o desenvolvimento com Dart. Neste curso, vamos desenvolver três projetos que ajudarão a entender melhor os fundamentos da linguagem Dart e, posteriormente, desenvolver aplicações com Flutter.

Para começar a desenvolver com Dart, é importante que o ambiente de desenvolvimento esteja configurado na sua máquina. Caso ainda não tenha feito isso, você pode acessar a atividade "Preparando o ambiente" e seguir os passos propostos.

Assim que tudo estiver configurado, pode retornar a este vídeo para gerar nosso primeiro projeto em Dart.

Criando a pasta do projeto

Após instalar o Dart na sua máquina, abriremos o terminal. Durante este curso, utilizaremos o terminal para configurar e gerar um projeto Dart.

Ao abrir o terminal, estaremos numa pasta chamada "home", independentemente de estarmos no Mac, Linux ou Windows - a menos que outra configuração tenha sido feita.

Para ver os conteúdos dessa pasta "home", utilizaremos um comando chamado ls, que serve para listar as pastas dentro deste diretório.

ls

Retorno do terminal:

AndroidStudioProjects     Music
Applications              Pictures
Desktop                   Postman
Documents                 Public
Downloads                 StoreItemView.swift
Library                   StoresContainerView.swift
Movies                    ios-server-driven-swift-bank

Entre elas, tenho uma pasta chamada "Documents", onde vou gerar o projeto Dart.

No Windows, existem dois terminais que podemos utilizar: o terminal de comando, ou CMD, e o PowerShell. Recomendamos utilizar o PowerShell no Windows para seguir as informações deste curso. Para Linux e Mac, os comandos utilizados aqui serão os mesmos e não haverá diferença.

Para navegar até a pasta "Documents", digitaremos o seguinte comando no terminal:

cd Documents

O nome da pasta "Documents" pode estar em português ou em inglês. É muito importante escrever o nome dela exatamente como aparecer no terminal, respeitando letras maiúsculas minúsculas, porque o terminal é case sensitive (sensível a maiúsculas e minúsculas). Ou seja, as letras maiúsculas e minúsculas influenciam no terminal encontrar ou não algum arquivo ou diretório.

Dentro da pasta "Documents", digitaremos novamente ls para ver o que há dentro dela.

3803-iOS-trabalhando-com-testes-de-unidade-no-app
3804-Andriu
Blockchain_Vinicius
TaskyApp
anybank
flutter
ios-chef-delivery-unit-test-mock-stub-84b225cc43892a978b3616c3e182074e62
72b44d

Dentro desse diretório, criaremos uma pasta chamada "dart" utilizando o comando abaixo:

mkdir dart

Para conferir a criação dessa pasta, rodaremos novamente o comando ls.

Retorno do terminal:

3803-iOS-trabalhando-com-testes-de-unidade-no-app
3804-Andriu
Blockchain_Vinicius
TaskyApp
anybank
dart
flutter
ios-chef-delivery-unit-test-mock-stub-84b225cc43892a978b3616c3e182074e62
72b44d

Navegaremos até a pasta "dart" com cd dart.

cd dart

Em seguida, rodaremos o comando ls novamente para verificar que a nada será retornado e, portanto, a pasta "dart" está vazia, conforme esperado.

Gerando o primeiro projeto

Vamos gerar primeiro projeto Dart. Para isso, digitaremos o seguinte comando:

dart create meu_app

Rodaremos o comando dart para fazer qualquer coisa relacionada ao Dart. O comando create é o nome da função que vai gerar algo - no caso, um projeto novo. Já meu_app é o nome do aplicativo que estamos gerando, e poderia ser substituído por outro qualquer.

Pressionando "Enter", o comando gerará as pastas, informando que está rodando o pub get, além de exibir outras informações na tela.

Assim que ele terminar de rodar, a parte inferior do terminal voltará a exibir o cursor da pasta em que estamos, assim como antes.

Entre as mensagens exibidas na tela, veremos a seguinte mensagem:

Created project meu_app in meu_app! In order to get started, run the following commands:

cd meu_app
dart run

A mensagem informa que um projeto meu_app foi criado na pasta "meu_app". Para começar, ele solicita que rodemos os comandos mencionados.

Com o comando cd meu_app, ele está solicitando que naveguemos para a pasta "meu_app". Já o comando dart run serve para executar e gerar o projeto em Dart.

Portanto, seguiremos essas recomendações, executando o cd meu_app, e depois o dart run.

Após o dart run, o terminal exibirá uma mensagem informando que o executável está sendo construído. Depois de construí-lo, há outra mensagem:

Hello world: 42!

De onde surgiu essa mensagem e o número 42?

Abrindo o projeto na IDE

A partir daqui, utilizaremos uma IDE (ambiente de desenvolvimento integrado) para visualizar o projeto. Você pode usar qualquer IDE que quiser, mas neste curso, utilizaremos o Visual Studio Code.

O Instalador do Visual Studio seleciona um pacote de idiomas padrão para o Visual Studio que corresponde ao idioma do sistema operacional. Para modificar o idioma, acesse a seção "Modificar pacotes de idiomas" no site oficial do Visual Studio Code e siga as instruções.

Abrindo o Visual Studio Code, veremos a página de boas-vindas, sem nenhum projeto aberto. Acessaremos a barra de menus superior e clicaremos em "File > Open Folder" (ou "Arquivo > Abrir Pasta" em português).

Na janela exibida, clicaremos uma vez na pasta "meu_app" que criamos dentro do terminal, por meio do caminho "Documentos > Dart". Em seguida, no canto inferior direito, clicaremos no botão "Open" ("Abrir").

Após o clique, A IDE carregará o projeto. Na aba do explorador, na lateral esquerda, veremos a árvore de arquivos do projeto.

Não nos preocuparemos com as pastas neste momento. Focaremos em um arquivo específico que está dentro da pasta "bin", chamado meu_app.dart.

Ao clicar nele, abriremos uma guia com seu conteúdo na área central da tela, chamada de editor de código. Fecharemos a aba lateral à esquerda com o "CTRL + B" (No Windows) para focar no arquivo.

Se estiver usando um Mac, basta substituir o "Ctrl" nos atalhos por "Command".

Dentro do arquivo, veremos uma linha de código com aquela mensagem "Hello World" e um número estranho aparecendo.

meu_app.dart:

import 'package:meu_app/meu_app.dart' as meu_app;

void main(List<String> arguments) {
    print('Hello world: ${meu_app.calculate()}!');
}

Limparemos esse arquivo para deixar o mínimo de código necessário para rodar um projeto Dart, sem os elementos gerados por padrão.

Limpando o arquivo

Primeiro, deletaremos a primeira linha, que tem um import, e também a linha vazia abaixo dela. Na linha que tem void main() e coisas dentro dos parênteses, não vamos precisar dessas coisas, portanto, deixaremos os parênteses vazios.

Após a abertura de chaves, na linha de baixo, temos uma função print(). Apagaremos esse print() para deixar essa linha vazia.

O resultado do código do arquivo ficou assim:

void main() {

}

Para um programa em Dart rodar, precisamos, essencialmente, desse void main, um bloco de parênteses e outro de chaves. Isso é o mínimo que ele precisa para funcionar.

Agora, escreveremos nossa versão da mensagem "Hello World". Para isso, usaremos o comando print(), que possui um bloco de parênteses.

Ao abrir parênteses, é possível que o Visual Studio Code os feche automaticamente.

Entre esses parênteses, adicionaremos entre aspas duplas um texto que queremos - por exemplo, o "Hello World" que existia antes. Por fim, no final dessa linha, precisamos colocar ponto e vírgula (;).

void main() {
    print("Hello World");
}

Executando a aplicação

Salvaremos esse arquivo com "Ctrl + S" e veremos sua execução. Para isso, ao invés de ficar indo e voltando para a página do terminal, usaremos o terminal integrado do Visual Studio Code.

Para abrir o terminal integrado em uma aba abaixo do editor de código, pressionaremos "Control + J". Na barra de menus dessa aba, temos várias guias diferentes, e uma delas chama-se "Terminal".

Ao clicar nela, veremos que o terminal é o mesmo que usamos para gerar o projeto em Dart. Contudo, a vantagem deste é que já estará configurado na pasta "meu_app", sem a necessidade de navegar por "Documentos > Dart" e meu_app. Ou seja, esse terminal abre diretamente a pasta na qual estamos trabalhando.

Nesse terminal, rodaremos o comando abaixo.

dart run

Esse comando fará uma build (compilação) do programa. Em seguida, nossa mensagem aparecerá em seu interior:

Hello World

Criando um projeto com Dart - Capturando entradas de usuário e exibindo mensagens na tela

No mundo real, não queremos apenas imprimir mensagens para a pessoa usuária. Também queremos que ela interaja com o teclado, seja inserindo informações de formulário, preenchendo um tipo de dado ou inserindo informações que solicitamos em programa, por exemplo.

Queremos que a pessoa usuária utilize o teclado para escrever e interagir com o programa. Para isso, precisamos usar uma ferramenta do Dart que vai fazer essa captura de informação.

Capturando a entrada da pessoa usuária

Voltando ao Visual Studio Code, fecharemos o terminal que tínhamos deixado aberto com o comando "Ctrl + J". Voltando ao editor de código, no arquivo meu_app.dart, acessaremos o final da linha que possui a função print(), onde escrevemos a mensagem "Hello World".

Pressionando ""Enter"" para acessar a linha de baixo, ainda dentro dos parênteses do print(), escreveremos o comando stdin.

void main() {
    print("Hello World");
    stdin
}

O comando stdin, por si só, não é suficiente para capturar alguma informação. Portanto, adicionaremos um ponto e chamar outra função chamada readLineSync().

Ela possui três palavras juntas, onde read começa com R minúsculo, Line e Sync com L e S maiúsculos. Essa prática de escrever palavras juntas com iniciais maiúsculas a partir da segunda palavra facilita a leitura do código e se chama Camel Case, porque cria a ilusão de corcovas de camelo.

Observação: Praticamente toda função do projeto terá um bloco de parênteses.

Após fechar os parênteses, podemos adicionar ponto e vírgula no final da linha.

void main() {
    print("Hello World");
    stdin.readLineSync();
}

Vamos salvar o arquivo com "Ctrl + S", abrir o terminal com "Ctrl + J" e rodar o comando dart run.

Logo depois de enviar o comando, ele exibirá a mensagem "Hello World", mas não exibirá o caminho da pasta após rodar o programa, como no terminal padrão. Em vez disso, ele apenas posicionou o cursor na próxima linha.

Dessa forma, conseguimos digitar alguma coisa para o programa, como por exemplo um "Olá":

Olá

Somente após escrever a mensagem e pressionar "Enter", ele terminará a execução do programa e voltaremos ao terminal, exibindo o caminho da pasta.

Fecharemos o terminal para entender algumas coisas.

Mencionamos que o stdin é uma ferramenta do próprio Dart para capturar informações de dados de uma pessoa usuária. Entretanto, no topo do arquivo, fizemos um import, porque a ferramenta da IDE provavelmente vai fazer esse import automaticamente.

Se ele fez um import, significa que foi necessário colocar alguma coisa extra dentro do arquivo e do programa. No topo do arquivo, onde adicionamos todos os import, existe agora um import 'dart:io'.

import 'dart:io';

void main() {
    print("Hello World");
    stdin.readLineSync();
}

Apesar de mencionarmos que o stdin é uma ferramenta nativa do próprio Dart, a verdade é que este possui muitas funcionalidades e ferramentas. Contudo, para não ficar tão pesado, ele foi dividido em várias partes.

Entre essas partes, temos o Dart Núcleo (core, em inglês), que possui as funções principais, como a main() e a print(). Como quisemos fazer uma coisa extra - a captura de entrada de pessoas usuárias -, tivemos que importar a ferramenta dart:io do próprio Dart. IO significa "entrada e saída" (ou IN-OUT, em inglês).

Armazenando a entrada

Nesse momento, estamos coletando as informações da pessoa usuária, digitadas no teclado, quando ela executa o programa. Mas, para onde vai essa informação digitada?

Para lugar nenhum, na verdade. Estamos capturando e deixando ela sumir depois que o programa fecha.

Vamos guardar essa informação em algum lugar?

Para guardar a informação que a pessoa digita em algum lugar, podemos usar variáveis. Trata-se de um conceito no qual podemos guardar dados dentro do Dart.

Para criar uma variável, criaremos uma linha vazia abaixo do stdin e acima do fechamento das chaves do main(). Nela, escreveremos var, espaço, e o nome da variável - que pode ser entrada, por exemplo.

import 'dart:io';

void main() {
    print("Hello World");
    stdin.readLineSync();
    var entrada
}

O editor apontará um erro nessa palavra, porque temos que atribuir algum valor a ela. Por ora, vamos entender como uma variável funciona, adicionando um sinal igual, que é o símbolo de atribuição e um par de aspas duplas.

Entre as aspas, escreveremos o texto "Uma mensagem". Por fim, temos que colocar ponto e vírgula no final da linha.

import 'dart:io';

void main() {
    print("Hello World");
    stdin.readLineSync();
    var entrada = "Uma mensagem";
}

Salvaremos o arquivo com "Ctrl + S" e abriremos o terminal com "Ctrl + J" para rodar dart run. Com isso, o terminal mostrará o "Hello World".

Hello World

Digitaremos alguma mensagem - por exemplo, "Olá" -, e pressionaremos "Enter".

Olá

Nossa mensagem não apareceu, porque não pedimos para ela ser impressa ainda. Então, vamos fechar o terminal com o "Ctrl + J".

Para imprimir, já vimos que temos que usar a função print(). Portanto, pularemos mais uma linha para baixo da variável entrada e escreveremos print() adicionando entrada entre os parênteses e ponto e vírgula no final da linha.

É importante nunca esquecer do ponto e vírgula para finalizar a linha de código.

import 'dart:io';

void main() {
    print("Hello World");
    stdin.readLineSync();
    var entrada = "Uma mensagem";
    print(entrada);
}

Salvaremos o arquivo, abriremos o terminal novamente e rodaremos dart run. Após a mensagem "Hello World", escreveremos a mensagem "Olá", pressionaremos "Enter", e agora veremos a mensagem.

Uma mensagem

Com isso, conseguimos imprimir variáveis com a função de print().

Agora, imprimiremos o que a pessoa usuária digitou. Para isso, ao invés de colocar "Uma mensagem" na variável entrada, adicionaremos uma mensagem que a pessoa usuária vai inserir.

Para adicionar essa mensagem, ao invés de colocar aspas duplas e escrever alguma coisa, escreveremos stdin.readLineSync() e apagar o stdin.readLineSync() da linha de cima.

import 'dart:io';

void main() {
    print("Hello World");
    var entrada = stdin.readLineSync();
    print(entrada);
}

Manteremos o restante do programa como antes e salvaremos o arquivo.

Acessando o terminal, rodaremos novamente o comando dart run. Após ver a mensagem "Hello World" e digitar a mensagem "Olá", ele imprimirá "Olá".

Olá

Vamos fazer algo mais divertido com isso? Conseguimos capturar a mensagem e mostrá-la na tela, mas o que conseguimos construir com essas informações?

Já entendemos como imprimir, capturar e salvar a mensagem em algum lugar, além de mostrá-la em uma variável. Agora, fecharemos o terminal e reescreveremos o programa.

Apagaremos tudo o que estava entre as chaves do main(), e no lugar, escreveremos uma mensagem legal - como "Olá, me chamo Dart. Qual o seu nome?" - dentro de um print().

import 'dart:io';

void main() {
    print("Olá, me chamo Dart. Qual o seu nome?");
}

Descendo uma linha, coletaremos a mensagem que a pessoa usuária vai digitar - o seu nome -, e escreveremos uma mensagem com esse nome.

Para isso, temos que capturar o que a pessoa digitou, criando uma var entrada, o sinal de atribuição, e o stdin.readLineSync().

Não podemos esquecer do ponto e vírgula no final de cada linha.

import 'dart:io';

void main() {
    print("Olá, me chamo Dart. Qual o seu nome?");
    var entrada = stdin.readLineSync();
}

Na linha seguinte, imprimiremos outra mensagem com um print(). Entre parênteses, escreveremos a mensagem "Muito prazer", vírgula, e o nome da pessoa.

Para escrever o nome da pessoa no meio do texto, usaremos uma técnica chamada interpolação, com a qual podemos utilizar variáveis dentro de strings (textos).

Para isso, ainda entre as aspas duplas, escreveremos um cifrão ($), acompanhado da variável entrada.

import 'dart:io';

void main() {
    print("Olá, me chamo Dart. Qual o seu nome?");
    var entrada = stdin.readLineSync();
    `print("Muito prazer, $entrada")`;
}

Após $entrada, podemos prosseguir escrevendo a mensagem entre as aspas duplas. Nesse caso, escreveremos um ponto e a frase "Vamos fazer vários programas juntos!".

import 'dart:io';

void main() {
    print("Olá, me chamo Dart. Qual o seu nome?");
    var entrada = stdin.readLineSync();
    `print("Muito prazer, $entrada. Vamos fazer vários programas juntos!")`;
}

Salvaremos o arquivo, abriremos o terminal e rodaremos novamente o comando dart run.

Como resultado, o programa falará:

Olá, me chamo Dart, qual o seu nome?

Digitaremos nosso nome na resposta - no meu caso, "Matheus".

Meu nome é Matheus

Como resposta, teremos:

Muito prazer, Matheus. Vamos fazer vários programas juntos!

Conclusão e próximos passos

Conseguimos criar essa interatividade utilizando o Dart, e é possível fazer muito mais.

Para saber o que mais o Dart consegue fazer, te esperamos na próxima aula.

Sobre o curso Dart: trabalhando com a sintaxe e configuração de projeto

O curso Dart: trabalhando com a sintaxe e configuração de projeto possui 138 minutos de vídeos, em um total de 69 atividades. Gostou? Conheça nossos outros cursos de Flutter em Mobile, ou leia nossos artigos de Mobile.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda Flutter acessando integralmente esse e outros cursos, comece hoje!

Conheça os Planos para Empresas