Boas práticas em Flutter
Tags: productivity, flutter, dart, codequality
Published: 2021-11-18 23:20:01

Então aqui vamos com algumas boas práticas voltadas ao Flutter, já tinha esse documento de forma interna porém é algo interessante a ser compartilhado!

###Configuração do projeto

- Flutter e Dart latest sempre que possível;

- Configuração do [lint](https://pub.dev/packages/lint) para o Flutter;

- Checar versão do Flutter e do Dart antes do build para evitar erro;

- [Testes unitários](https://medium.com/cristiano-cunha/testes-automatizados-dart-cf9df0e741ab) com coverage configurado no repositório;

- [Testes de Widgets](https://docs.flutter.dev/cookbook/testing/widget/introduction) também são importantes;

- Prática de versionamento com branches, utilizando [Feature Branch](https://www.optimizely.com/optimization-glossary/feature-branch/#:~:text=A%20feature%20branch%20is%20a,for%20how%20individuals%20work%20together);

- Todo MR (Merge Request) deve ter no mínimo testes para o [Happy Path](https://en.wikipedia.org/wiki/Happy_path);

###Frameworks

- Uso do Flutter [Lint](https://pub.dev/packages/lint);

- Uso do [GetX](https://pub.dev/packages/get) como gerenciador de estados;

- [Clean Architecture](https://pub.dev/packages/flutter_clean_architecture);

- [Firebase Core](https://pub.dev/packages/firebase_core) para conexão com o Firebase;

- [Biometric Storage](https://pub.dev/packages/biometric_storage) para salvar biometria de usuário no seu acesso ao app.

- [Flutter Secure Storage](https://pub.dev/packages/flutter_secure_storage) para salvar dados no dispositivo do usuário, de forma que torne a experiência do usuário com um desempenho melhor.

- Utilização do [HTTP](https://pub.dev/packages/http) e do [DIO](https://pub.dev/packages/dio) para realizar as chamadas de API e comunicações HTTP.

###Considerações arquiteturais

- Pasta lib com o código do projeto;

- Pasta test com o código de testes do projeto;

- Pasta fonts com as fontes do projeto;

- Pasta assets com as imagens, ícones, textos do projeto;

- Pasta build com o bundle se existir;

- Arquivo pubspec.yaml no root do projeto para configuração das bibliotecas;

- Tentar separar módulos por features/entidades;

- Testes sempre referenciando o mesmo nível de pastas do código da Lib.

- Utilização de nomes de classes, variáveis e afins sempre tendo referência aos conceitos do negócio, de maneira descritiva e clara e deixando explícita sua intenção, como sugere o [Clean Code](https://medium.com/upday-devs/basics-of-clean-code-flutter-project-ui-part-b7fa93c31775).

- Criação de nomes e afins sempre em inglês.

- Utilização do conceito de [Clean Architecture](https://pub.dev/packages/flutter_clean_architecture);

###Monitoramento

- Utilização do [Firebase Analytics](https://firebase.google.com/docs/analytics);

- Utilização do [Firebase Crashlytics](https://firebase.google.com/products/crashlytics);

- Adicionar integração do Firebase com o Slack -> [TUTORIAL](https://support.google.com/firebase/answer/9005934?hl=en)

###Clean Architecture

- [Conceito](https://github.com/Flutterando/Clean-Dart);

- [Estrutura de pastas](https://docs.google.com/document/d/1thGOm56jMAuZRjb1fxFjtTmTdUUJqFwgVKxUkzjZPxg/edit);

- [Vídeo explicativo](https://www.youtube.com/watch?v=LOBdq_4HnwY&ab_channel=Flutterando);

Valeu mais uma vez pessoal!