Publicando seus packages no pub.dev
Tags: packages, pubdev, publishing, flutter
Published: 2024-05-01 01:32:31

Fala Devs, é muito comum quando vamos desenvolver um app a recorrermos a utilização de packages lá no pub.dev, lá tem packages realmente uteis e aposto que você já teve uma ideia que também iria ajudar alguém, o que alguns talvez não saibam é que todos nós podemos submeter nossos packages para serem utilizados lá, além disso podemos criar nosso projeto orientados a packages onde criamos cada feature de nosso projeto e disponibilizamos por meio de packages para o restante do nosso time. Neste artigo iremos criar um package para ser publicado no pub.dev.

Primeiramente precisamos criar nosso projeto com o flutter create, mas antes de realizarmos o create vamos adicionar o argumento -h para saber o que podemos fazer no flutter create.

Observe que temos o argumento — template=<type> é exatamente este argumento que utilizaremos para gerar o package, em especial temos o tipo package e plugins, basicamente packages são pacotes em código puro em dart e plugins são pacotes que usarão código nativo (kotlin ou swift), no artigo de hoje iremos utilizar o package.

![](https://cdn-images-1.medium.com/max/800/1*zcVwPLKlkrijXnLPPw9FYw.png)

![](https://cdn-images-1.medium.com/max/800/1*CPTgHPswMBH5akwsTnYzpQ.png)

Com isso teremos uma estrutura bem semelhante ao do app em flutter

![](https://cdn-images-1.medium.com/max/800/1*gZBDtQ1Wdzxa7TqxXs_V7A.png)

E se observarmos o pubspec ele também é bem parecido, ele possui algumas informações a mais como nome do package, descrição, versão etc. também podemos adicionar dependências, vamos adicionar o Dio.

![](https://cdn-images-1.medium.com/max/800/1*tS3NScteIuaabgFfHvqzrw.png)

![](https://cdn-images-1.medium.com/max/800/1*MVfeD30siyusfx1eVj0KRA.png)

Como se trata de um package é muito importante em tomar cuidado de que as dependências que utilizamos não quebre com a versão conforme a versão (e ao mesmo tempo não deixarmos obsoletas) então na versão vamos utilizar a notação >= 3.0.9 < 4.0.0, isso significa que ele ira utilizar o DIO na versão mais recente a partir da 3.0.9 e até a versão 4.0.0, isso porque quando mudar a major version significa que o package teve uma grande break change e provavelmente irá fazer com que meu código quebre.

Vamos também alterar a description, esta informação é a que aparecerá no about do seu package no pub.dev.

![](https://cdn-images-1.medium.com/max/800/1*qmwv6nMvF4_Ug8EnyCQp8w.png)

![](https://cdn-images-1.medium.com/max/800/1*Gj22gRTAaXySiCwu4HF2tQ.png)

![](https://cdn-images-1.medium.com/max/800/1*VY7YDVlw5tDF8sI0V0BLMg.png)

Algo bastante importante a se fazer (caso deseje publicar seu package no pub.dev) é criar um projeto de exemplo chamado exemplo dentro do projeto do seu package, mostrando em como você deve utilizar seu package.

Com isso você já pode ir ao pubspec do seu projeto ‘example’ e adicionar referência para seu package

![](https://cdn-images-1.medium.com/max/800/1*URKFd4Thlvcvm7NpiFGUZg.png)

![](https://cdn-images-1.medium.com/max/800/1*TNGghhGNqyW5KzDB30oriw.png)

Utilizaremos o nome que está no arquivo principal do seu package

![](https://cdn-images-1.medium.com/max/800/1*quWcMYx1h5CEFyBYzglOOw.png)

Feito isso vamos voltar ao projeto do nosso package e estruturá-lo da seguinte maneira.

![](https://cdn-images-1.medium.com/max/800/1*YRItqH2tpKM5E9TYMU38Mw.png)

Em nossa model vamos prepará-la para receber o JSON e armazenar o id, o nome do Pokémon e a url da imagem.

![](https://cdn-images-1.medium.com/max/800/1*Q1rME3zlD6_3L3stalAw1Q.png)

Em nosso repository apenas iremos fazer uma requisição ao [https://pokeapi.co/api/v2/pokemon/num](https://pokeapi.co/api/v2/pokemon/num) utilizando o Dio, passando o número como parâmetro, isso me retornara informações do Pokémon

![](https://cdn-images-1.medium.com/max/800/1*lQb0KIh7HhpZFVgNM1EckA.png)

Já no meu controller apenas terei o método que recebera um número e irá chamar meu get() do repository

![](https://cdn-images-1.medium.com/max/800/1*EMojHffTu_6Rb_cJtrN1MA.png)

Enfim, tenho um widget que tem um FutureBuilder que receberá o retorno da função get do controller e irá tratar o retorno para montar uma coluna com a imagem do Pokémon e o nome e o número em cima.

![](https://cdn-images-1.medium.com/max/800/1*obUrKeB6JCFNziQtJidfEA.png)

Agora no meu arquivo principal eu preciso exportar meu widget para que meu aplicativo consiga enxergar meu widget (poderia exportar aquilo que eu quiser como os modelos e até mesmo os repositories)

![](https://cdn-images-1.medium.com/max/800/1*CYi2vjKgS4_I9YUn20HoOg.png)

Agora voltamos ao meu app de exemplo para testarmos a implementação do meu package.

No arquivo main.dart vamos importar o widget do meu package

![](https://cdn-images-1.medium.com/max/800/1*pbtszRXh3u7QMYxek8IG7g.png)

E já na minha HomePage posso chamar meu widget Pokemon() passando o parâmetro num.

![](https://cdn-images-1.medium.com/max/800/1*Om4BaeF-7mt1puiQhongNA.png)

Desta forma ao rodarmos o App teremos o seguinte resultado

![](https://cdn-images-1.medium.com/max/800/1*nyAtFPig7Qh06fRYaZJQjQ.png)

Pronto! meu package está pronto para uso, caso eu queira deixar meus packages privados para utilização de um projeto interno utilizando a orientação a packages, eu paro por aqui, coloco em um repositório privado da minha empresa e utilizo ele em meu projeto. Mas a intenção do artigo é também mostrar como podemos publicá-los em modo público lá no pub.dev.

Então vamos seguir em frente, é uma boa publicarmos nosso package lá no github em um repositório público. Para isso vamos lá no github, clicamos em New

![](https://cdn-images-1.medium.com/max/800/1*3_TTGaUy4gMAStdalOttgA.png)

Depois damos um nome para o repositório e uma descrição

![](https://cdn-images-1.medium.com/max/800/1*McP3cOly_S3AvpTYAQOUBQ.png)

Depois voltamos no terminal aberto la no nosso projeto e primeiramente iniciaremos o git na nossa pasta com git init

![](https://cdn-images-1.medium.com/max/800/1*qGCS6JK5qQnAQRv_CvvI0g.png)

Temos que adicionar as alterações no nosso repositório local com git add .

![](https://cdn-images-1.medium.com/max/800/1*58mICufNlX4Ow1Zej_okpw.png)

E agora commitar nossas alterações

![](https://cdn-images-1.medium.com/max/800/1*nUzrlLgY-lNW_APQQGYy4Q.png)

Em seguida vamos apontar o git para o endereço do nosso github

![](https://cdn-images-1.medium.com/max/800/1*92anWo1HS0S4hoBbzY2Q0A.png)

E finalmente dar um git push para empurrar nossas alterações para o repositório (no caso o github)

![](https://cdn-images-1.medium.com/max/800/1*UVkcuSxo_0g4pwTDICmtcQ.png)

Feito isso nosso código estará lá no github

![](https://cdn-images-1.medium.com/max/800/1*hIaEYghSbrH--SrvSoQKXg.png)

Agora podemos alterar a homepage no pubspec do nosso package para o endereço do github.

![](https://cdn-images-1.medium.com/max/800/1*71glgA8PxSKd5Lx5MIyvhQ.png)

Temos também um arquivo de Changelog, lá é onde colocaremos as modificações do package conforme a versão

![](https://cdn-images-1.medium.com/max/800/1*6wB07qAvMiuyu9pcOeF4KA.png)

Ele vai aparecer lá no site do pub.dev na aba changelog

![](https://cdn-images-1.medium.com/max/800/1*60Rc3AtqDnM9f09fSdmATg.png)

Feito isso é só publicar o package flutter pub publish, mas antes disso vamos ver o -h

![](https://cdn-images-1.medium.com/max/800/1*yJa_YM23CZnX_5WP8QOlgQ.png)

Lá temos o argumento –dry-run, este argumento serve para verificar se está tudo certo no seu package e se está sem nenhuma pendência para ser publicado.

![](https://cdn-images-1.medium.com/max/800/1*6bAdA3BKjYWuABfz10RiCA.png)

![](https://cdn-images-1.medium.com/max/800/1*LDCkaf8_D9S3sg7R9gi1Ng.png)

Se estiver tudo certo aparecera esta mensagem. Agora sim podemos publicar

Vai pedir para você confirmar

![](https://cdn-images-1.medium.com/max/800/1*fF46CdLZdDHqSCZvW7B4DQ.png)

![](https://cdn-images-1.medium.com/max/800/1*pVRJcrLYblqmO4G3KS6hyw.png)

Logo em seguida ele irá pedir para realizar login na sua google account, basta entrar no link e fazer o login

![](https://cdn-images-1.medium.com/max/800/1*wHeD7ALRQuCxtEQcps9ZVA.png)

![](https://cdn-images-1.medium.com/max/800/1*NowjXBTQRjFg0zOC5HuLfQ.png)

![](https://cdn-images-1.medium.com/max/800/1*G17infi6xCXLtl7mcYDuOg.png)

Depois de fazer o login aparecera a mensagem de sucesso

![](https://cdn-images-1.medium.com/max/800/1*rzrHFBPljXE9O9cXI4rtfw.png)

A aparição do seu package no pub.dev não é imediata, leva um tempo ate replicar em todos os servidores, mas se voltar em alguns minutos já irá ver seu package publicado

![](https://cdn-images-1.medium.com/max/800/1*69ybq_jXs7ZpdWIA4M2f4g.png)

![](https://cdn-images-1.medium.com/max/800/1*HwYYlWxv9U_HaBl1Pwr__Q.png)

Viu só? É muito facil construir um package, agora você já pode fazer o seu.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/obcg0d2y00yddve9quky.png)


Entre em nosso discord para interagir com a comunidade: https://discord.com/invite/flutterbrasil
https://linktr.ee/flutterbrasil