bcdmobile_cma
v3.0.1
Published
Aplicação Agora Abrantes
Readme
Descrição
Aplicação Agora Abrantes
A arquitetura desta app segue a abordagem "feature-first". As features devem ser orientadas as funcionalidades que o utilziador pode fazer e não aos ecrãs. Features são requisitos funcionais.
Instalação Flutter
Seguir este tutorial para Windows :
https://medium.com/@blup-tool/step-by-step-guide-to-installing-flutter-and-dart-on-windows-b30a631e7583
Ambientes
As variáveis de ambientes devem ser configuradas num ficheiro .env . Este ficheiro deve ser criado apenas localmente e nunca deve ser versionado.
Deve ser pedido a alguém da equipa o ficheiro a criar.
Para modificar o ficheiro a carregar basta ir ao ficheiro env.dart e alterar o caminho do ficheiro .env.
Sempre que se alterar valores do env. convêm correr os comandos
dart run build_runner clean
dart run build_runner build --delete-conflicting-outputsGIT
Os commits devem seguir o convetional commit explicado aqui https://cmabyinw.atlassian.net/wiki/spaces/Abrantes/pages/819224/Mensagem+do+commit.
Na pipeline será feita a validação desta convenção.
É no ficheiro commitlint.config.js a onde estão definidas as regras.
Estrutura
A estrutura de pastas deve refletir a abordagem "Feature First"
lib: Contém todo o código da aplicação.
|--core:
| |-assets: Armazena os assets compartilhados por toda a aplicação, como imagens, ícones, etc.
| |-constants: Define constantes utilizadas em diversas partes do código.
| |-exceptions: Define as exceções personalizadas da aplicação.
| |-localization: Contém os arquivos de localização para internacionalização.
| |-models: Define os modelos de dados compartilhados.
| |-routing: Define as rotas da aplicação.
| |-services: Contém serviços compartilhados, como serviços de notificação, analytics, etc.
| |-theme: Define o tema da aplicação.
| |-utils: Contém utilitários diversos.
| |-widgets: Contém widgets reutilizáveis em toda a aplicação.
|--features:
| |--account: Contém tudo relacionado à funcionalidade de gestão de conta do utilizador.
| |-data
| |-datasources: Interage diretamente com as fontes de dados (bd, APIs, etc.). Contém a lógica para realizar as operações de leitura e escrita de dados.
| |-repositories: Fornece uma interface abstrata para acessar os dados, escondendo a complexidade dos datasources. Pode incluir lógica de negócio relacionada ao acesso aos dados, como cache, sincronização ou validação.
| |-domain
| |-entities: Define as entidades do domínio, representando os objetos de negócio da aplicação.
| |-usecases: Encapsulam a lógica de negócio de uma determinada funcionalidade. Um use case define uma ação que um utilizador pode realizar.
| |-presentation
| |-pages: Contém os ecrãs da aplicação, responsáveis pelo UI.
| |-providers: Define os providers utilizados para gerenciar o estado da aplicação, como os providers do Riverpod
| |-widgets: Contém widgets reutilizáveis específicos daquela feature.
| |--authentication: Contém tudo relacionado à autenticação.
| ...
| |--registration: Contém tudo relacionado ao registro de novos utilizadores.
| ...References
https://cmabyinw.atlassian.net/wiki/spaces/Abrantes/pages/3538969/Estrutura+da+APP
Release Manual
Tendo em conta que estamos a usar conventional commits e semantic versioning, é possível automatizar o processo de geração de novas versões. Esta geração apenas funciona para android, para iOS, é necessário usar TestFlight ou AppleStore.
Instalação
Para automatizar o processo vamos usar um package npm standard-version, este package vai ler todos os commits desta a ultima versão e vai:
- Criar/Atualizar um CHANGELOG.MD.
- Fazer bump da versão tendo em conta os tipos de commits.
- Criar um commit com uma tag para a nova versão.
Para instalar o npm correr:
npm installGeração de nova release
Para criar uma nova versão correr :
npm run releasePosteriormente fazer push da tag e correr :
flutter build apk --releaseNota: para fazer build do apk em release é preciso ter localmente definido os valores para :
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile keystoreProperties['storeFile']
storePassword keystoreProperties['storePassword']