DEV Community

João Pedro Gonçalves
João Pedro Gonçalves

Posted on

Estratégias de Ativação de Features Flags no GitLab - exemplo prático em Flutter

Para que usamos Feature Flags

Podemos pensar em Feature Flag(FF) como a sinalização para uma Recurso de um sistema. Essa sinalização vai dizer se essa recurso está acessível ou não.

Tecnologias envolvidas

Apesar do caráter booleano das FFs, surgiram implementações e especificações que associam estratégias ao seu uso.

O Unleash contém a especificação que o package dart Unleash Client SDK, importado pela nossa aplicação, usa para interagir com a alternância de recursos(feature toggles).

O repositório do nosso app está no GitLab, este por sua vez usa o já citado Unleash para disponibilizar aos desenvolvedores as Feature Flags Gitlab.

Rodando a Aplicação exemplo

Neste pr do unleash multi tenant POC temos o estado de código suficiente para trabalhar disponibilidade de recursos usando userIDs.

git clone https://github.com/GeoSales-Evolution/unleash-multi-tenant-flutter-poc.git
Enter fullscreen mode Exit fullscreen mode

Para usar o projeto com sucesso é preciso atribuir corretamente as variáveis de ambiente no arquivo .env como descrito neste post.

Em seguida é preciso rodar a aplicação.

flutter run 
Enter fullscreen mode Exit fullscreen mode

E finalmente chegar a tela que testa as Feature Flags.

Tela inicial POC unleash multitenant

flag tela poc

Criando Feature Flag

Usaremos estratégias baseadas em userIDs. Como estamos trabalhando como GitLab é preciso ter acesso à um projeto nessa plataforma, e então acessar a tela de features flags.

Navegação Menu GitLab

Então Vamos criar uma Feature Flag clicando no botão New feature flag.

Cabeçalho Feature Flags Gitlab

Estratégias

Vamos abordar 3 estratégias com exemplos

1/3 All users

Essa é a estratégia mais simples, pois não filtra(restringe) nenhum usuário.

All users

Mesmo passando um usuário qualquer via Context, ou até mesmo sem passar usuário, receberemos positivo caso a flag esteja ativa.

Feature Flag ativa

Esse trecho está no PR 18 Unleash multi tenant POC, sendo responsável por por printar a disponibilidade do recurso no console.

print('Is feature accessible ? == ${unl.isEnabled(flagText, localContext: Context(userId: "usuarioqualquer"))}');
Enter fullscreen mode Exit fullscreen mode

consulta flag

2/3 Usando userIDs diretamente

Podemos digitar as strings correspondentes aos usuários e associas essa estratégia à Feature Flag

userID capivara

Como não estamos passando o userID capivara no código Dart o resultado vai ser negativo.

False

Assim que passarmos o userID pelo contexto, temos resultado positivo.

print('Is feature accessible ? == ${unl.isEnabled(flagText, localContext: Context(userId: "capivara"))}');
Enter fullscreen mode Exit fullscreen mode

capivara true

OBS: hot reload pode não atualizar o construtor de Context causando erros nos seus testes.

3/3 Usando Listas de Usuários

Novamente no cabeçalho de Feature Flags, vamos escolher a opção "View Users List".

FF

Depois "New user list"

New user list

Depois de criada a lista vamos adicionar usuários em "Add Users"

Add Users

users

lista pronta

Lista pronta e contendo usuários podemos usá-la como estratégia para nossa FF.

Depois deselecionar a opção "edit", entramos na tela de edição de FFs, muda-se a estratégia e escolhemos a lista.

lista

Caso o userID passado no contexto esteja contido na lista teremos um resultado positivo.

print('Is feature accessible ? == ${unl.isEnabled(flagText, localContext: Context(userId: "sabia"))}');
Enter fullscreen mode Exit fullscreen mode

sabia true

Demais estratégias

Existem outras estratégias usadas com Feature Flags, além da opção de adicionar várias estratégias na tela de edição - basta clicar em "Add strategy".

add strategy

Conclusão

Usando GitLab, Flutter e Unleash vimos que as regras são todas definidas no nosso repositório GitLab, enquanto que passamos informações do usuário via Context no lado Dart para avaliar a disponibilidade do recurso.

Valeu !!

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

Top comments (0)

Qodo Takeover

Introducing Qodo Gen 1.0: Transform Your Workflow with Agentic AI

Rather than just generating snippets, our agents understand your entire project context, can make decisions, use tools, and carry out tasks autonomously.

Read full post

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay