Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

Gerenciamento de dependências em 
Flutter
Apresentação
Ao desenvolver uma aplicação, quando um objeto é criado, alguns requisitos devem ser cumpridos 
para que possa funcionar corretamente. Tudo que é necessário, é considerado uma dependência. 
Para isso, nos últimos tempos, o Flutter tem se tornado bastante popular. Isso porque, os objetos 
geralmente dependem uns dos outros e em Flutter, ao falar de dependência, se está fornecendo 
aos objetos do sistema outros objetos dos quais eles dependem com baixo acoplamento. Por isso, 
diversas empresas estão adotando o Flutter, como o Nubank. 
Como forma de reduzir o tempo de desenvolvimento, o Flutter suporta a inclusão de pacotes 
compartilhados fornecidos por outros desenvolvedores, direcionados para aplicações Flutter e 
Dart. Com essa proposta, é possível reduzir o tempo de construção de um aplicativo, justamente 
por não ser necessário desenvolver tudo do zero.
A utilização de pacotes de terceiros acarreta a inclusão de dependências no aplicativo 
desenvolvido, que podem ser administradas por meio de gerenciadores de dependências — no caso 
do Flutter, tem-se o pub.dev como referência principal. Aliado ao repositório, arquivos específicos 
são utilizados para intermediar esse gerenciamento, realizando a instalação, a atualização e a 
remoção, afastando essa obrigação do desenvolvedor.
Nesta Unidade de Aprendizagem, você vai aprender um pouco mais sobre as diferenças entre 
pacotes (packages) e plugins e vai entender como é feita a gerência de suas dependências no 
pub.dev. Por meio de exemplos de aplicação, você terá uma visão mais abrangente das vantagens 
de sua utilização.
Bons estudos.
Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados:
Diferenciar packages e plugins.•
Gerenciar dependências disponibilizadas no pub.dev. •
Consumir packages e plugins.•
Desafio
Cada vez mais, o perfil das agências de desenvolvimento de softwares tem se especializado no 
atendimento à crescente demanda por aplicativos para dispositivos móveis. Com isso, frameworks 
como o Flutter têm ganhado muito espaço no mercado. A maioria dessas empresas padroniza seus 
processos desde o momento da criação, como forma de organizar o trabalho e agilizar 
manutenções futuras. Algumas padronizações já têm início no momento de criação do projeto.
Nesse sentido, acompanhe a situação a seguir: 
Considerando os requisitos e as dependências listadas, apresente o código do arquivo 
pubspec.yaml inicial preenchido com os requisitos solicitados. Demonstre o arquivo com as 
configurações solicitadas.
Infográfico
Cada projeto Flutter inclui um arquivo pubspec.yaml, conhecido geralmente por pubspec, que é 
gerado durante a criação de um projeto. Ele contém metadados sobre o projeto, bem como outras 
informações importantes. Além de especificar as dependências que o desenvolvimento do projeto 
requer, ele também contém referências a recursos como fontes ou arquivos de imagem. Ademais, 
especifica outros requisitos, como dependências em pacotes de desenvolvedor (como pacotes de 
teste ou simulação) ou restrições específicas na versão do Flutter SDK.
Neste Infográfico, você vai entender um pouco mais sobre a configuração básica de um arquivo 
pubspec e como ele é subdividido.
Conteúdo interativo disponível na plataforma de ensino!
 
 
Conteúdo do Livro
Gerenciadores de dependências permitem que desenvolvedores selecionem quais dependências 
serão essenciais para uma aplicação funcionar. Tais ferramentas realizam esse gerenciamento 
efetuando instalações e atualizações ou removendo essas dependências, conforme as necessidades 
do projeto. Para tanto, o Flutter utiliza um arquivo chamado pubspec.yaml, no qual o 
desenvolvedor pode definir quais pacotes ou plugins o projeto necessita para funcionar e as 
configurações necessárias para gerenciar as dependências de forma eficaz.
No capítulo Gerenciamento de dependências em Flutter, base teórica desta Unidade de 
Aprendizagem, você vai conhecer os conceitos de packages e plugins e vai compreender o processo 
de gerência de dependências disponibilizadas no pub.dev. Também serão apresentados exemplos 
de aplicação de packages e plugins.
Boa leitura.
DESENVOLVIMENTO 
MOBILE 
OBJETIVOS DE APRENDIZAGEM
 > Diferenciar packages e plugins.
 > Gerenciar dependências disponibilizadas no pub.dev.
 > Consumir packages e plugins.
Introdução
O Flutter é um framework multiplataforma para desenvolvimento de aplicativos 
Android e iOS. Contando com uma comunidade ativa, tem uma ampla quantidade 
de pacotes e plugins. Esses pacotes são projetados para reutilização e inclusão 
em qualquer projeto, ampliando as funcionalidades e reduzindo o tempo para 
desenvolvimento.
O uso de pacotes, como já mencionado, reduz a necessidade de desenvolver o 
projeto todo “do zero”, mas gera uma dependência entre o aplicativo e o pacote 
instalado. Essa dependência traz impactos na gerência de manutenção, correções 
e compatibilidade entre as versões dos próprios pacotes. 
Essa gerência das dependências pode se tornar um processo complexo e 
improdutivo de acordo com o número de pacotes utilizado, complexidade esta que 
aumenta conforme incluímos em nossa gerência o controle das dependências que 
os pacotes utilizados também possam ter. Para minimizar esse processo, utilizamos 
gerenciadores de dependentes que automatizam grande parte do processo de 
Gerenciamento 
de dependências 
em Flutter
Marcelo da Silva dos Santos
gestão. Flutter utiliza o arquivo pubspec.yaml como principal fonte de gerência e 
configuração das dependências do projeto, podendo inclusive coordenar essas 
atualizações diretamente com o repositório de pacotes do Flutter, o pub.dev.
Neste capítulo, você vai conhecer os conceitos relacionados ao gerenciamento 
de dependências, bem como os conceitos de pacotes e plugins. Ao final, alguns 
exemplos de utilização de pacotes e plugins serão apresentados.
Introdução ao gerenciamento de 
dependências
O desenvolvimento de sistemas vem se expandindo ao longo das últimas 
décadas. O potencial e a importância do software eram questionados, tendo 
o hardware o todo o destaque. Desde seus primórdios, partindo da tábua de 
calcular até os grandes mainframes IBM, o hardware ganhava todo o destaque 
nos estudos computacionais. Por volta dos anos 1960, a história teve uma 
reviravolta e, como resultado, atualmente diversos segmentos (indústria, 
negócios, governo, ciência, dentre outros) são dependentes de sistemas de 
informação que auxiliam em tomadas de decisão, automatização e gestão. 
Esses sistemas estão mais inseridos em nossas vidas do que conseguimos 
perceber, desde análises comportamentais em redes sociais, a automatização 
dos controles em uma aeronave ou, simplesmente, o pedido de uma refeição 
pelo smartphone.
Devido a essa rápida expansão, o início do aumento de escala dos sistemas 
sofreu importante impacto, sobretudo porque, naquele momento, os proces-
sos de desenvolvimento eram relativamente imaturos. Garantir qualidade 
de projetos de grande escala (confiabilidade, usabilidade, segurança, entre 
outras características) era inviável, pois as ferramentas para desenvolvimento 
e gestão desenvolvidas até então não supriam tal necessidade. Esse cenário 
levou ao aumento da descrença no software, devido a recorrentes perdas de 
prazo, orçamento elevado, falta de atendimento aos requisitos e manutenção 
inviável. A apreensão era tanta que esse período foi chamado de “crise do 
software” (VALENTE, 2020).
Muito se devia ao processo de manufatura de um sistema, sistemas novos 
eram criados do zero, muitas vezes aproveitando partes de outros projetos 
de forma direta, em outras palavras “copiando e colando”. Apesar de resolver 
Gerenciamento de dependências em Flutter2
o problema, essa prática também tem suas desvantagens; como exemplo, 
considere que precisamos realizar o acesso a uma base de dados, nesse caso, 
o desenvolvedor poderia copiar o trecho e alterar os aspectos necessários.Até esse ponto está tudo certo, mas se descobrirmos futuramente algum erro 
de funcionamento no código original, esse erro será replicado em todos os 
pontos para onde ele foi copiado e, caso não tenhamos uma documentação 
adequada, vamos ter retrabalho em buscar todos os sistemas e locais onde 
o trecho foi utilizado.
Com a evolução dos padrões e princípios de desenvolvimento, os processos 
de reutilização de código evoluíram para construção de módulos, ou seja, em 
vez de copiar diretamente o código, passou-se a utilizar pacotes projetados e 
construídos para reaproveitamento e que encapsulam funcionalidades especí-
ficas, como o acesso ao banco. Tais pacotes eram adicionados manualmente ao 
projeto em desenvolvimento. Isso gera aumento de produtividade e facilidade 
de aumento da escala do projeto, mas também gera uma dependência entre 
eles, pois o projeto que utiliza o pacote fica dependente do módulo utilizado, 
o que pode trazer novos desafios ao desenvolvedor.
Muitos desses pacotes são gerenciados por comunidades de desenvolve-
dores, algumas mais ativas do que outras. Quanto mais ativa a comunidade, 
mais atualizações, funcionalidades e correções são efetuadas e, se o ge-
renciamento desses pacotes é manual, dependendo do número de projetos 
em que estamos envolvidos, é quase impossível acompanhar todas as atu-
alizações do módulo utilizado, principalmente quando se trata das versões 
e compatibilidades. Um detalhe é que frequentemente esses módulos de 
terceiros também utilizam módulos de outras comunidades parceiras no seu 
desenvolvimento, gerando novas dependências em cascata e aumentando 
exponencialmente a complexidade de acompanhamento manual, tornando 
impossível gerenciar dessa forma.
Como forma de reduzir essa complexidade e os impactos de possíveis 
falhas, a automatização desse processo por meio de sistemas gerenciadores 
é cada vez mais comum. Com a utilização dos gerenciadores de dependências, 
os desenvolvimentos podem gerenciar melhor o seu tempo e, inclusive, buscar 
com maior facilidade algum pacote que implemente alguma necessidade do 
projeto. A partir do uso de gerenciadores de dependências, as ações como 
busca, inclusão, remoção e atualização, além do rastreamento em cascata 
das dependências dos pacotes empregados no projeto, também são obtidas.
Gerenciamento de dependências em Flutter 3
Diversas linguagens já possuem seus gerenciadores de dependências, 
como as listadas a seguir.
 � Maven: um dos mais famosos gerenciadores para Java. Também faz a gerência 
para Kotlin.
 � Composer: gerenciador de dependências do PHP.
 � PEAR Installer: outro exemplo de gerenciador PHP.
 � NPM: voltado para aplicações web e JavaScript.
 � Yarn: outro exemplo de gerenciador JavaScript.
 � Gradle: gerenciador de dependências Java, Groovy, Kotlin, Android, Scala e 
JavaScript.
 � NuGet: gerenciador de dependências .NET.
 � Pip: gerenciador de dependências Python.
 � Rubygem: gerenciador de dependências Ruby.
Cada linguagem tem suas comunidades de desenvolvedores e suas próprias 
ferramentas para gerenciamento de pacotes, plugins e dependências. No caso 
do Flutter, podemos citar o pub.dev como um dos principais repositórios e 
gerenciadores. Mas antes de nos aprofundarmos melhor nessa ferramenta, 
vamos ver como o Flutter entende os conceitos de pacotes e plugins.
Pacotes e plugins
Como já comentado anteriormente, o Flutter também suporta o uso de pacotes 
de terceiros, ou seja, pacotes para funcionalidades específicas desenvolvidos 
e compartilhados por outros desenvolvedores compatíveis e padronizados 
para projetos Flutter e Dart. Também já comentamos as vantagens da uti-
lização dessas funcionalidades, tanto na redução no tempo estimado para 
construção dos sistemas quanto na segurança no controle das atualizações 
e manutenção da aplicação.
No pub.dev, gerenciador de pacotes para Flutter, vamos encontrar dois 
termos recorrentes: packages (ou pacote, em tradução para o português) e 
plugins.
Gerenciamento de dependências em Flutter4
 � Pacotes — De forma resumida, um pacote (ou package) é um diretório 
(pasta) que será incluído junto à árvore de diretórios de seu projeto. 
Entre os arquivos de código específicos para a funcionalidade a qual 
ele se destina, ele contém um arquivo de configuração, chamado de 
pubspec (o pubspec.yaml lista as dependências do pacote e inclui 
outros metadados, como um número de versão), e outros arquivos 
que podem ser necessários, como outras dependências (listadas no 
pubspec), bibliotecas Dart, recursos, testes, imagens e exemplos. 
No pub.dev podemos buscar uma grande variedade desses pacotes, 
grande parte desenvolvidos por engenheiros do Google e por comu-
nidades de desenvolvedores Flutter e Dart.
 � Plugins — podem ser considerados como um tipo diferenciado de pacote, 
que provê funcionalidades da plataforma Flutter para o aplicativo. 
Os plugins também podem ser escritos para Android (usando Kotlin ou 
Java), iOS (usando Swift ou Objective-C), web, macOS, Windows, Linux ou 
qualquer combinação deles. Como exemplo, podemos utilizar um plugin 
para controlar a câmera de um dispositivo em uma aplicação Flutter.
São muitos os exemplos de aplicação de pacotes e plugins, como acessar 
componentes do dispositivo (como a câmera), realizar requisições HTTP, tra-
tar rotas ou integrar com alguma API. Além disso, podemos escrever nossos 
próprios pacotes e, se todos os parâmetros do repositório forem seguidos, 
até podemos submeter para o compartilhamento do pub.dev.
Conhecendo o pub.dev
O pub.dev, como já foi comentado, é um repositório de projetos e gerenciador 
de dependências para Flutter e Dart. Nele podemos localizar e incluir em nosso 
projeto qualquer pacote e plugin disponibilizado. Logo que carregamos a 
página (Figura 1), nos deparamos com algumas categorias em destaque, como 
os favoritos, pacotes mais populares e os top 10 do Flutter e do Dart. Para 
realizarmos a busca por uma funcionalidade, basta utilizar palavras-chave 
relacionadas com o que estamos buscando.
Gerenciamento de dependências em Flutter 5
Figura 1. Tela do pub.dev.
Fonte: Dart... (2021, documento on-line).
Imagine que você precise validar sequências de CPF ou CNPJ para validação 
de formulários, por exemplo; poderia, então, pesquisar utilizando a palavra-
-chave CPF. Como resultado, teremos todos os pacotes que se encaixam em 
nossa pesquisa (dependendo do caso, talvez os termos de busca tenham que 
ser mais bem refinados).
No pub.dev (2021, documento on-line) podemos enriquecer nossas consul-
tas utilizando algumas palavras-chave, que auxiliam a melhorar a assertividade 
dos resultados, como as descritas a seguir. 
 � "frase exata" — Por padrão, quando você realiza uma pesquisa, 
os resultados incluem pacotes com frases semelhantes. Quando uma 
frase está entre aspas, você verá apenas os pacotes que contêm exa-
tamente a frase especificada.
 � package:prefix — Pesquisa pacotes que começam com prefix. Use esse 
recurso para localizar pacotes na mesma estrutura.
Gerenciamento de dependências em Flutter6
 � dependency:package_name — Pesquisa pacotes que fazem referência 
package_name em seus pubspec.yaml.
 � dependency*:package_name — Pesquisa por pacotes que dependem 
de package_name (como dependências diretas, dev ou transitivas).
 � email:user@example.com — Pesquisa pacotes em que o autor ou o 
uploader tenham o endereço de e-mail especificado.
Outra forma de melhorar os resultados é com o uso dos filtros.
 � À esquerda da barra de pesquisa, selecione “Dart” ou “Flutter”, depen-
dendo do SDK com o qual você está desenvolvendo.
 � À direita da barra de pesquisa, clique nos botões de filtro de plataforma 
para filtrar os resultados dos pacotes que suportam as plataformas 
para as quais você precisa de suporte.
 � Para usar filtros de plataforma para plataformas alfa (por exemplo, 
Flutter Desktop), use a opção Avançado na extremidade direita da 
barra de pesquisa.
Veja outras formas de identificar os pacotes mais adequados.� Classificação — As listagens padrão usam uma composição das três 
pontuações para classificar os pacotes. A classificação é baseada na 
pontuação composta e, se aplicável, na especificidade da plataforma 
e na pontuação de correspondência de texto da equipe de pesquisa.
 � Pacotes legados — pub.dev não expõe pacotes que suportam apenas 
o Dart SDK 1.x nos resultados da pesquisa ou nas páginas de listagem. 
No entanto, é possível acessar esses pacotes por meio da página do 
pacote (/packages/) e o cliente pub pode baixá-los. Para pes-
quisar esses pacotes, inclua is:legacy na consulta de pesquisa.
 � Favoritos — No pub.dev existe uma lista dos “pacotes favoritos” (Flut-
ter Favorites Program). Essa lista possui os pacotes e plugins que os 
desenvolvedores devem considerar quando estiverem construindo 
seu aplicativo. Ela segue um conjunto de métricas e é definida por um 
comitê composto por membros da comunidade Flutter.
Na Figura 2, podemos visualizar a listagem obtida a partir de nossa busca. 
Cada resultado também apresenta um conjunto de informações pertinentes, 
como sua pontuação, popularidade entre os usuários, dentre outros. 
Gerenciamento de dependências em Flutter 7
Figura 2. Tela do pub.dev apresentando listagem de pacotes após a busca.
Fonte: Search... (2021, documento on-line).
Ao selecionar um dos itens, podemos ver outras informações sobre o 
pacote, na aba pontuações (score), onde podemos ter dados sobre a documen-
tação, suporte para múltiplas plataformas e atualizações das dependências, 
dentre outras. E por que essas informações são importantes? Sabendo que um 
módulo recebe atualizações frequentes e que a comunidade é ativa, logo, a 
possibilidade de seu desenvolvimento ser abandonado é menor, e consequen-
temente, a possibilidade de manutenções para substituição desses módulos 
também é menor, citando somente um exemplo. Uma boa documentação 
também é um indício de qualidade, ou seja, quanto melhor a pontuação, mais 
robusto e confiável (menor a possibilidade de retrabalho e erros no projeto).
Gerenciamento de dependências em Flutter8
Figura 3. Tela do pub.dev mostrando aba de scores (pontuações) de um pacote.
Fonte: cpfcnpj... (2019, documento on-line).
Ainda nesta área, encontramos outras abas importantes.
 � Readme (leia-me) — É uma descrição sucinta sobre o módulo. Aqui 
podemos encontrar informações sobre o uso do pacote.
 � Changelog (alterações) — É o registro das últimas alterações (correções, 
atualizações, dentre outras) executadas nos componentes do pacote.
 � Example (exemplo) — São exemplos de aplicação e configuração do 
pacote.
 � Installing (instalando) — São as instruções de como o pacote deve ser 
carregado no projeto.
 � Versions (versões) — É um registro histórico das versões estáveis li-
beradas para utilização.
 � Scores (pontuações) — É a pontuação recebida pelo pacote, com base 
em quesitos como adesão às regras da comunidade e as convenções 
da linguagem, documentação robusta e com exemplos, abrangência 
e suporte a múltiplas plataformas, suporte e atualização de depen-
dências, dentre outras.
Gerenciamento de dependências em Flutter 9
Para utilização do pacote, podemos primeiro verificar as indicações da 
aba Installing; na Figura 4, é indicado adicionar a dependência do pacote ao 
arquivo pubspec.yaml. Esse arquivo é responsável pela gerência dos pacotes 
ativos e de suas dependências em um aplicativo Flutter. 
Figura 4. Configuração padrão do arquivo pubspec.yaml.
Nele vamos adicionar cpfcnpj (1.0.3 ou superior) à lista de dependências. 
Note que o arquivo original do projeto já possui a dependência do pacote 
Cupertino (Cupertino _ icons), necessária para utilização de ícones do iOS 
em aplicativos Flutter, incluídos automaticamente. Vamos adicionar nossa 
dependência nesse mesmo local (Figura 5).
Figura 5. Adicionando uma dependência ao projeto.
Logo após, o próximo passo é fazer o download e incluir os arquivos do 
pacote no nosso projeto. Dependendo do editor que você estiver utilizando, 
poderá encontrar pequenas diferenças na nomenclatura da funcionalidade. 
No Android Studio teremos o botão Pub get disponível na interface somente 
Gerenciamento de dependências em Flutter10
enquanto o arquivo está em edição. Já em outras ferramentas (como o Eclipse), 
a funcionalidade é Package get. Sua execução realizará a comunicação com 
o repositório, o download e a instalação dos pacotes na estrutura do projeto. 
Você também pode executar a ação no console, em linha de comando, como 
na Figura 6.
Figura 6. Processo de instalação dos pacotes após edição do arquivo pubspec.yaml. 
(a) Imagem do editor de código Visual Studio, com a funcionalidade Pub get disponível para 
o arquivo de configuração. (b) Imagem do console (prompt) executando a função Pub get 
por linha de comando.
a
b
Durante o processo de instalação do Pub get, também será gerado o arquivo 
pubspec.lock, que terá a relação de todos os pacotes incluídos no projeto e 
seus respectivos versionamentos. Para completar a ação, precisamos agora 
importar o pacote em nosso projeto, e, para isso, vamos editar o arquivo 
localizado em lib/main.dart e incluir a importação do novo pacote (Figura 7).
Figura 7. Importação do pacote instalado no arquivo main.dart.
Agora estamos prontos para testar nossa nova funcionalidade. Você pode 
utilizar o trecho de código para teste indicado na documentação do pacote, 
aquele disponível na aba Exemplo. Vamos incluí-lo no mesmo arquivo em 
que acabamos de adicionar a importação (Figura 8). 
Gerenciamento de dependências em Flutter 11
Figura 8. Inserindo o código de teste disponibilizado pelo autor do pacote.
Na Figura 9, você pode verificar o exemplo e seu resultado da execução 
do teste no console do editor.
Figura 9. Resultado do teste após edição do arquivo main.dart.
Assim temos certeza de que tudo foi configurado corretamente e esta-
mos prontos para acessar as novas funcionalidades e utilizá-las em nossa 
aplicação. Você deve ter notado a importância do arquivo pubspec.yaml na 
configuração e no controle das dependências do projeto; na próxima seção, 
vamos explorar melhor sua configuração, bem como o controle de versões.
Gerenciamento de dependências em Flutter12
Gerenciamento de dependências e 
o arquivo pubspec
Como visto anteriormente, o processo de gerenciar as atualizações, correções 
e dependências em cascata (que os pacotes incluídos possam ter) torna-se 
um complexo e improdutivo para ser realizado manualmente, se somado à 
possibilidade latente de erros, falta de rastreamento das dependências em 
pacotes de terceiros, dentre outros problemas. Outro ponto estudado foram 
os primeiros passos para inclusão de um pacote e sua configuração inicial e, 
para tanto, conhecemos o arquivo pubspec.yaml.
Cada projeto em Flutter terá um arquivo pubspec.yaml, geralmente cha-
mado somente de pubspec pelos desenvolvedores. Sua estrutura básica é 
gerada ao criar um projeto Flutter e possui um conjunto de metadados sobre 
o projeto. Isso é escrito com a linguagem YAML, muito semelhante a sintaxe 
do JSON, de fácil leitura por humanos, mas com suas particularidades; por 
exemplo, ele reconhece tabulações e espaços como parte da sintaxe, logo as 
indentações e alinhamentos do código levadas em consideração na execução 
do código (assim como python). Como curiosidade, YAML é um acrônimo 
recursivo para “YAML ain’t markup language” (YAML não é linguagem de 
marcação, traduzindo para o português).
Voltando ao pubspec, ele define as dependências que o projeto requer, 
como pacotes específicos (e suas versões), arquivos de fontes ou de ima-
gens. Também define outros requisitos, como dependências em pacotes de 
desenvolvedor (pacotes de teste ou simulação) ou restrições específicas na 
versão de pacotes.
Na primeira construção do seu projeto, também é criado o arquivo 
pubspec.lock, que contém versões específicas dos pacotes incluídos. 
Isso garante que você obtenha a mesma versão na próxima vez que o projeto 
forconstruído.
Quando você cria um projeto com o Flutter, automaticamente é gerado 
um arquivo pubspec com configurações básicas para a aplicação. O arquivo é 
subdividido em diferentes seções, as quais você pode observar na Figura 10.
Gerenciamento de dependências em Flutter 13
Figura 10. Exemplo de configuração inicial básica de um arquivo pubspec.yaml.
Seção Metadados
A primeira parte do arquivo é destinada à definição dos metadados, ou seja, 
as informações sobre os dados contidos nele. Logo no início, encontramos 
o parâmetro name, responsável por identificar o nome do projeto. Outro 
campo observado é description, que, como imaginado, é utilizado para 
inserir uma descrição do objetivo da aplicação (campo opcional). Caso esse 
pacote seja publicado do pub.dev, essas informações ficarão disponíveis na 
identificação do pacote. Recordando o exemplo apresentado na Figura 10, 
o valor incluído no campo description é “Um utilitário fácil de usar para 
validação e formatação de CPF/CNPJ”.
Gerenciamento de dependências em Flutter14
O campo version informa a versão do aplicativo, ou seja, permite o 
controle de versão do aplicativo para o usuário e para as lojas de aplicativos 
(Google Play Store e iOS App Store, por exemplo). No exemplo da Figura 10, 
observamos a versão 1.0.0+1, o que significa que nosso aplicativo está na 
versão 1.0.0 com versão de compilação 1.
Outros campos opcionais podem ser incluídos como metadados, como 
author (indica o nome do desenvolvedor), homepage (página do projeto), 
issue _ track (página com os issues do projeto) e repository (um github, 
por exemplo).
Seção Environment (ambiente)
Na seção seguinte, encontramos os campos relacionados ao ambiente da 
aplicação. Nele podemos incluir alguma restrição relacionada a SDK do Dart 
e à versão do Flutter. Por exemplo, ao definir:
environment:
 sdk: ">=2.7.0 =2.7.0 =5.4.0 =1.2.3 
=0.1.2com mais detalhes o arquivo responsável pela gerência 
de dependências do Flutter. Na próxima seção, você vai conhecer exemplos 
de consumo de packages (pacotes) e plugins.
Exemplo de utilização de packages e plugins
A seguir, serão demonstrados dois exemplos de utilização, um de pacote e 
um de instalação de plugin. Tais exemplos servem de base para implantação 
de quaisquer outros pacotes necessários ao projeto, basta buscá-los no pub.
dev e incorporá-los ao seu desenvolvimento.
Gerenciamento de dependências em Flutter 19
Exemplo de configuração do pacote css_colors
Como primeiro exemplo, vamos incluir a dependência para o pacote css _ co-
lors (USING..., 2021). Sua atribuição é definir constantes para cores em CSS. 
Com ele, podemos utilizar constantes sempre que houver a necessidade de 
trabalhar com o tipo Color.
Para usar esse pacote:
 � crie um projeto chamado exemplo _ pacote _ color;
 � abra pubspec.yaml, e adicione a dependência css-colors:
dependencies:
 flutter:
 sdk: flutter
 css _ colors: 1̂.0.0
Execute flutter pub get no terminal ou acione a função para buscar 
os pacotes (pub get, por exemplo).
Abra no editor o arquivo lib/main.dart e inclua o exemplo disponível 
no repositório pub.dev, no pacote css_colors (2021, documento on-line), 
dessa forma:
import 'package:css _ colors/css _ colors.dart';
import 'package:flutter/material.dart';
 void main() {
 runApp(MyApp());
 }
 class MyApp extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
 return MaterialApp(
 home: DemoPage(),
 );
 }
 }
Gerenciamento de dependências em Flutter20
 class DemoPage extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
 return Scaffold(body: Container(color: CSSColors.orange));
 }
 }
Agora vamos ao teste, para isso execute o aplicativo. Caso tudo esteja 
correto, o plano de fundo do seu aplicativo de teste deve estar na cor laranja.
Exemplo de configuração do plugin url _ launcher
Um pacote de plugin, como já comentado anteriormente, tem estrutura se-
melhante a um pacote comum, com a diferença de ser uma funcionalidade 
específica para atender a alguma necessidade. Neste exemplo, vamos tra-
balhar com o plugin url_launcher (FLUTTER..., 2021), uma funcionalidade que 
nos permite abrir o navegador padrão do dispositivo móvel e carregar um 
determinado URL.
Novamente, vamos a configuração de dependência para o plugin em 
nosso projeto:
 � crie um projeto chamado exemplo _ plugin _ launch;
 � abra pubspec.yaml, e adicione a dependência url _ launcher:
dependencies:
 flutter:
 sdk: flutter
 url _ launcher: ^5.4.0
Abra no editor o arquivo lib/main.dart e inclua o exemplo disponí-
vel no repositório pub.dev, agora no pacote url_launcher (2021, documento 
on-line), dessa forma:
import 'package:flutter/material.dart';
 import 'package:url _ launcher/url _ launcher.dart';
Gerenciamento de dependências em Flutter 21
 void main() {
 runApp(MyApp());
 }
 class MyApp extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
 return MaterialApp(
 home: DemoPage(),
 );
 }
 }
 class DemoPage extends StatelessWidget {
 launchURL() {
 launch('https://flutter.dev');
 }
 @override
 Widget build(BuildContext context) {
 return Scaffold(
 body: Center(
 child: ElevatedButton(
 onPressed: launchURL,
 child: Text('Show Flutter homepage'),
 ),
 ),
 );
 }
 }
Pronto, agora basta executar o aplicativo e testar a funcionalidade nova. 
Para tanto, clique em Mostrar página inicial do Flutter, e você deverá ver o na-
vegador padrão aberto no dispositivo, exibindo a página inicial do flutter.dev.
Gerenciamento de dependências em Flutter22
Neste capítulo, você conheceu um pouco mais sobre gerenciamento de 
dependências em Flutter, sua importância e como esse processo pode ser 
realizado. Você conheceu o pub.dev, que além de ser um gerenciador de 
dependências do Flutter, é um dos principais repositórios da comunidade. 
Lá estão catalogadas todas as soluções compartilhadas pela comunidade, 
organizadas e pontuadas pelos próprios usuários, servindo de referência e 
comparativo entre soluções semelhantes. Com o aumento das necessidades do 
mercado, as aplicações tornam-se também mais complexas, e poder expandir 
as funcionalidades utilizando pacotes e plugins de qualidade traz vantagens 
para o seu negócio e, consequentemente, para seu cliente.
Referências
CPFCNPJ 1.0.3. pub.dev, [S. l.], 2019. Disponível em: https://pub.dev/packages/cpfcnpj. 
Acesso em: 22 jun. 2021.
CSS_COLORS 1.1.1. pub.dev, [S. l.], 2021. Disponível em: https://pub.dev/packages/
css_colors. Acesso em: 22 jun. 2021.
DART packages. pub.dev, [S. l.], 2021. Disponível em: https://pub.dev/. Acesso em: 
22 jun. 2021.
FLUTTER documentation. Flutter, [S. l.], 2021. Disponível em: https://flutter.dev/docs. 
Acesso em: 22 jun. 2021.
SEARCH results for CPF. pub.dev, [S.  l.], 2021. Disponível em: https://pub.dev/
packages?q=CPF. Acesso em: 22 jun. 2021.
URL_LAUNCHER 6.0.7. pub.dev, [S. l.], 2021. Disponível em: https://pub.dev/packages/
url_launcher. Acesso em: 22 jun. 2021.
USING packages. Flutter, [S. l.], 2021. Disponível em: https://flutter.dev/docs/deve-
lopment/packages-and-plugins/using-packages#examples. Acesso em: 22 jun. 2021.
VALENTE, M. T. O. Engenharia de software moderna: princípios e práticas para desenvol-
vimento de software com produtividade. Belo Horizonte: Edição do autor, 2020. 408 p.
Leituras recomendadas
DART documentation. Dart, [S. l.], 2021. Disponível em: https://dart.dev/docs. Acesso 
em: 22 jun. 2021.
MARINHO, L. H. Iniciando com Flutter Framework: desenvolva aplicações móveis no 
Dart Side! São Paulo: Casa do Código, 2020. 173 p.
Gerenciamento de dependências em Flutter 23
Os links para sites da web fornecidos neste capítulo foram todos 
testados, e seu funcionamento foi comprovado no momento da 
publicação do material. No entanto, a rede é extremamente dinâmica; suas 
páginas estão constantemente mudando de local e conteúdo. Assim, os editores 
declaram não ter qualquer responsabilidade sobre qualidade, precisão ou 
integralidade das informações referidas em tais links.
Gerenciamento de dependências em Flutter24
Dica do Professor
Pub.dev é o gerenciador de pacotes da linguagem de programação Dart, contendo bibliotecas e 
pacotes reutilizáveis para programas Flutter, Angular Dart e Dart, em geral. Sua página inicial 
apresenta os principais pacotes compatíveis com o Flutter (aqueles que declaram dependências 
geralmente compatíveis com o Flutter) e oferece suporte à pesquisa entre todos os pacotes 
publicados. A página lista os plugins e pacotes que podem estender as funcionalidades do aplicativo, 
reduzindo o tempo para desenvolvimento. Sua vasta galeria é organizada de forma a facilitar a 
localização e a escolha do pacote mais adequado para cada situação.
Nesta Dica do Professor, você vai aprender um pouco mais sobre o pub.dev, os seus métodos de 
busca e algumas dicas para a escolha dos pacotes.
Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar.
 
https://fast.player.liquidplatform.com/pApiv2/embed/cee29914fad5b594d8f5918df1e801fd/36a31cd8af2256a13be382159bd7d992
Exercícios
1) O Flutter tem seu próprio gerenciador de pacotes, acessado a partir do pub.dev. Por meio 
dele, pode-se ter acesso a um vasto volume de recursos capazes de expandir a aplicação e 
minimizar o tempo de desenvolvimento. Além de fornecer uma interface simples e 
minimalista, esse gerenciador fornece um conjunto de chaves de busca para auxiliar a 
localização dos pacotes mais adequados.
Considerando as formas de busca disponibilizadas pelo pub.dev, assinale a alternativa 
correta:
A) Por padrão do pub.dev, os termos utilizados para realizar uma busca deverão ser inseridos 
entre aspas.
B) Pode-se utilizar chaves de busca para localizar pacotes, informando o e-mail do 
desenvolvedor do pacote.
C) Utiliza-sea chave dependency*: para buscar todos os pacotes que fazem referência ao termo 
pesquisado.
D) Utiliza-se a chave de busca versions: para localizar o histórico das versões estáveis de um 
pacote.
E) A chave de busca scores: é utilizada para a busca de pacotes com melhor pontuação entre os 
desenvolvedores.
2) O pubspec.yaml é o arquivo utilizado para o controle de dependências em aplicativos 
Flutter. Sua configuração básica envolve determinados parâmetros que definem diferentes 
aspectos e recursos da aplicação.
Considerando a configuração básica desse arquivo, assinale a alternativa correta:
A) Deve-se obrigatoriamente atribuir no pubspec, para cada aplicação Flutter, um conjunto de 
metadados, como version, name e author.
B) Informações sobre os metadados do pacote são incluídas no topo do arquivo, como name, 
description, version e environment. 
C) Pode-se incluir dependências destinadas ao uso somente em ambiente de teste, como 
pacotes para teste ou geração de código. 
D) Caso a versão do Flutter utilizada seja informada em environment, pode-se dispensar o 
detalhamento individual na seção Flutter.
E) Pode-se ocultar a versão de um pacote ao inseri-lo na propriedade dependencies; nesse caso, 
a ferramenta utiliza qualquer versão.
3) Seja qual for a linguagem, o controle de versões de um package deve receber especial 
atenção e padronização, sob pena de acarretar erros no aplicativo que o utiliza. Os packages 
Flutter seguem um padrão de controle adicionando três números logo após o nome do 
pacote.
Considerando o controle de versões para o pacote Geolocator 7.0.3, assinale a alternativa 
correta:
A) O incremento do major version é o mais crítico dos três valores, pois altera compatibilidades.
B) A versão PATCH é incrementada quando se adicionam funcionalidades, mantendo a 
compatibilidade.
C) A versão MAJOR será incrementada quando forem feitas mudanças incompatíveis na 
aplicação que a utiliza.
D) A versão MINOR é incrementada quando adicionar funcionalidades sem manutenção da 
compatibilidade. 
E) Quando a versão MINOR é incrementada, devemos atribuir o valor zero para as versões 
PATCH e MAJOR.
4) A utilização de IDEs para desenvolvimento de código traz diversas facilidades ao 
desenvolvedor, incluindo ferramentas capazes de gerar código, organizar e trazer funções 
destinadas à gerência dos recursos do projeto. Esses ambientes, como o Android Studio e o 
Eclipse, trazem embutidas em sua interface funções destinadas ao gerenciamento de 
dependências e à implantação de pacotes necessários ao projeto.
Considerando as funções relativas ao gerenciamento de dependências, assinale a alternativa 
correta:
A) A função pub get é utilizada para realizar o download e a instalação dos pacotes necessários, 
mesmo com o pubspec fechado.
B) Enquanto se está editando o arquivo pubspec, pode-se acionar a função pub upgrade para 
realizar o download dos pacotes necessários.
C) A função pub downloader é utilizada para realizar o download e a instalação dos pacotes 
necessários, mesmo com o pubspec fechado.
D) Em aplicações mais antigas, deve-se utilizar pacotes legados para impedir conflitos, e, nesse 
caso, utiliza-se a função pub legacy.
E) Após incluir as dependências no arquivo pubspec, pode-se acionar a função pub get para 
realizar download dos pacotes necessários.
5) Por padrão, um pacote é formado por um conjunto de programas de dados organizado em 
uma unidade independente e que pode ser reutilizado. O pacote armazena diferentes 
funções e classes para um propósito ou utilitário específico, além do código compilado. O 
principal repositório de pacotes e gerenciador de dependências para Flutter é o pub.dev.
Analise as afirmativas a seguir, que tratam do pub.dev, e classifique-as em verdadeiras (V) ou 
falsas (F):
( ) A ferramenta disponibiliza uma página de pontuações para cada pacote lá publicado, 
sendo que esses pontos dependem da avaliação da comunidade e da aderência às regras da 
comunidade. 
( ) Pode-se encontrar pacotes por meio das listagens de pacotes indicados pela comunidade 
ou por busca direta. 
( ) Após escolher o pacote a ser utilizado, deve-se utilizar a função pub get disponível na aba 
Instalação do pub.dev, indicando o nome do projeto em desenvolvimento, para iniciar o 
download e a instalação do pacote.
Assinale a alternativa que indica a sequência correta:
A) F — V — F.
B) V — F — V.
C) F — F — F.
D) V — V — F.
E) F — V — V.
Na prática
Com o aumento da escala de projetos e a busca constante por incrementar a produtividade das 
equipes, os pacotes de funcionalidades acabam sendo muito empregados. Esses pacotes podem 
oferecer diversas funcionalidades, desde a simples manipulação de cores dos elementos da 
interface até complexas funções de consumo e persistência de dados. Como alguns requisitos 
podem ser muito específicos para determinado segmento, alguns desenvolvedores optam por 
implementar seus próprios pacotes, para que possam ser reutilizados em seus projetos futuros.
Acompanhe, Na Prática, um resumo dos passos para a criação de um pacote para consumir dados 
via JSON.
Aponte a câmera para o 
código e acesse o link do 
conteúdo ou clique no 
código para acessar.
https://statics-marketplace.plataforma.grupoa.education/sagah/95666dd5-022f-4914-865b-e8cead4fc7cd/033f1f41-6758-47e0-bfd5-95aba209f894.jpg
 
 
Saiba mais
Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do professor:
Instalando packages externos (pub.dev)
Neste vídeo, acompanhe o processo de instalação de pacotes diretamente do repositório pub.dev 
do Flutter.
Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar.
10 packages para o Flutter feitos por brasileiros
Neste vídeo, conheça 10 exemplos de packages criados por comunidades brasileiras de 
desenvolvimento Flutter.
Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar.
Developing packages & plugins
Nesta documentação oficial, descubra um pouco mais sobre pacotes e plugins, seus padrões de 
criação e como publicá-los no Pub.dev.
Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar.
https://www.youtube.com/embed/TR57h_hx5DU
https://www.youtube.com/embed/p_bKpIzn4i0
https://flutter.dev/docs/development/packages-and-plugins/developing-packages
Top 5 pacotes Flutter que você precisa conhecer
Neste vídeo, acompanhe pacotes que podem ser utilizados no Flutter e os recursos que cada um 
deles oferece ao desenvolvedor.
Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar.
Pub.dev
Neste site, saiba mais sobre o repositório apresentado na Dica do Professor e no Na Prática. O 
Pub.dev é o gerenciador de pacotes da linguagem de programação Dart, contendo bibliotecas e 
pacotes reutilizáveis para aplicações Flutter e Dart.
Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar.
https://www.youtube.com/embed/Fc8D_6TtiKw
https://pub.dev/

Mais conteúdos dessa disciplina