🍨Flavors no Flutter Leap
O que são, como usamos e por quê usamos
O QUE SÃO FLAVORS
Primeiramente, temos que entender um contexto que podemos (e praticamente sempre) nos encontramos enquanto estamos no processo de desenvolvimento dos apps, que é o de existir mais um ambiente para acessar os dados do app, um para os desenvolvedores, outro para testes e outro para produção de fato, o que seria hoje nos nossos casos os ambientes de staging, homolog e production. O que normalmente acontece nesses casos é onde temos diferentes URL’s para conectar a API para cada um desses ambientes. Este é o conceito básico do que seriam os Flavors (para android, para o iOS chamamos de schemes), ter o mesmo aplicativo se comportando de maneiras diferentes em determinadas situações ou integrações.
PRA QUE SERVEM OS FLAVORS
Podem ser citados alguns outros casos onde podemos fazer o uso de flavors para nos beneficiarmos. Como já citado anteriormente, fazer o uso de diferentes URL’s das API’s é um deles, usar icones diferentes no app, diferentes nomes, apontar para diferentes instâncias do firebase e até mesmo diferenciar uma versão paga para uma versão free.
O QUE DIFERENCIA UM APP DE OUTRO
Para que de fato nossos aplicativos sejam considerados como diferentes, para que quando instalados no celular, sejam dois aplicativos distintos, é necessário configurar qual o identificador do app. No android esse identificador é chamado de applicationId, e no iOS de bundleId. Cada aplicativo existente no mundo tem que ter um identificador único, e é dessa maneira que podemos diferenciar nossos apps com flavors também.
COMO FAZEMOS O USO DOS FLAVORS NOS NOSSOS APPS
Existem várias maneiras para configurar e utilizar os flavors nos apps Flutter, temos algumas libs já existentes, e alguns tipos diferentes de configurações. Aqui, vou mostrar qual foi a maneira que nos escolhemos para utilizar, que consideramos que é de certa forma simples, mas eficiente.
-ANDROID
A primeira configuração que pode ser feita, é no arquivo build.gradle em android/app/build.gradle, vamos adicionar o seguinte código:

Nessa parte do código é onde definimos os nomes de cada um nos nossos flavors (production, homolog, staging), e apontamos qual vai ser o applicationId de cada um, a versão, e o nome (ambas se mantendo vindo de configurações mais internas, que vou explicar).
OBS: é muito importante que o nome dos identificadores tenham relação ao nome do seu flavor, para facilitar o restante do processo.
Agora, para que seja possível usar diferentes arquivos de firebase, e diferenciar os nomes dos nosso apps, é necessário que sejam criadas pastas específicas para cada flavor, dentro do caminho android/app/src, ficando desta maneira:

Se nossa aplicação fizer uso do firebase, é dentro de cada uma dessas pastas que vão ficar os arquivos de configuração do firebase para Android.
Dentro de cada um dessa pastas, podemos criar um arquivo de strings com o seguinte caminho: res/values/strings.xml, nele é onde poderemos configurar qual o nome de cada um dos nossos apps para os diferentes flavors, e tambem qualquer outro tipo de configuração que dependa de alguma string fixa, como por exemplo da imagem abaixo, um campo para setar diferentes id’s para login com facebook.

Após essa definição do arquivos de strings, para que funcione, é preciso que ele seja referenciado dentro do arquivo AndroidManifest.xml, como no exemplo abaixo na linha 5 para o nome do app:

Bom, e para que de fato consigamos pegar a informação do flavor utilizado dentro do código, para que possamos criar as regras de negócios, é onde fazemos a utilização de um arquivo criado como o nome de setup_flavors, que se encontra no nosso leap no caminho lib/src/utils/setups.
Como explicado anteriormente, o que define o flavor é o identificador do app, então é com ele que vamos fazer essas definições. Utilizando a lib package_info_plus, temos a possibilidade de resgatar essa informação do identificador do app em tempo de execução, e vamos trabalhar o resto em cima dela. Como definimos os identificadores com os nomes que fazem relação aos seus flavors, vai ficar bem simples de fazer as configuraçoes.
É criado uma função de setup, que é chamada depois na main da nossa aplicação, para que seja verificado a partir do nome do identificador, se ele possui ou homolog ou staging no seu nome, e caso não possua nenhum dos dois, automaticamente cai para a definição do flavor de produção, como demonstrado na imagem abaixo:

COMO RODAR USANDO FLAVOR
Para que nosso app possa ser executado utilizando a configuração dos flavors, precisamos adicionar a seguinte flag ao comando de flutter run: --flavor [NOME_DO_FLAVOR]
Por exemplo:
flutter run –flavor production
flutter run –flavor staging
Utilizando o vsCode, é possível definir esses argumentos da seguinte maneira:

iOS: A configuração do iOS é bem diferente em relação a definição dos identificadores, mas a parte do código não existe alteração, segue um link que explica passo a passo como configurar.
Last updated