Git Product home page Git Product logo

jf_desafio's Introduction

jf_desafio

Entrevista para Dev Dart|Flutter

Aplicativo esperado

O candidato deve criar um App Flutter, simples, que consuma a API de municípios do BrasilAPI e exiba a lista de municípios na tela.

Pode e é recomendado usar recursos de visualização de listas e recursos do Flutter. Use toda criatividade que há dentro de você, aqui a criatividade é livre. A lista de municípios pode ser do estado de Minas Gerais. Critérios Avaliados Abaixo estão os critérios utilizados (por ordem de importância) para avaliar os candidatos:

Relatório do desenvolvimento

Relatório do desenvolvimento, constando, pelo menos: dificuldades encontradas, justificativas dos métodos utilizados, fontes de pesquisa acessadas; Versionamento em git de todo o código desenvolvido: o código deve estar em um repositório privado (apenas durante o processo) e observando as boas práticas de versionamento; Documentação: deve conter no mínimo uma explicação básica do projeto e como executá-lo; O sistema desenvolvido deve estar funcionando conforme o esperado, com uma boa estrutura e observando as boas práticas de desenvolvimento. Mesmo que o candidato não consiga concluir o sistema em funcionamento, solicitamos que o resultado seja enviado.

Extras

Os itens abaixo serão considerados como bônus:

Opção de o usuário selecionar uma UF para exibir a lista de municípios; Paginação dos resultados; O App ter uma boa interface, usabilidade e design; Melhorias propostas pelo candidato.

Execução do Projeto

  • VS code abrir o projeto.
  • $flutter doctor (checar todos os requisitos para rodar flutter).
  • Caso não selecione um emulator, o projeto vai ser rodado web (Chrome).
  • $flutter run
  • no Chrome o app reinicia com reflesh
  • no emulador ou celular reiniciar o app.
  • para rodar no celular precisa estar no modo dev ativado e ligado ao computador por usb.

[√] Flutter (Channel stable, 3.7.7, on Microsoft Windows [Version 10.0.22621.1413], locale en-GB)
[√] Windows Version (Installed version of Windows is version 10 or higher)
[√] Android toolchain - develop for Android devices (Android SDK version 33.0.0)
[√] Chrome - develop for the web
[√] Visual Studio - develop for Windows (Visual Studio Community 2022 17.2.3)
[√] Android Studio (version 2022.1)
[√] VS Code (version 1.76.2)
[√] Connected device (3 available)
[√] HTTP Host Availability

Documentação

Pasta requirements do projeto:

  1. register_usecases.md
  2. register.feature

Desafios

Entender a api e as chamadas.

  • Como as UFs e as cidades trazem informações valiosas para o marketing (fazer ação para clientes em determinadas microregiões), resolvi criá-las como classe para que no futuro, se necessário, mais informações possam ser adicionadas facilmente.
  • A api retorna ou 200 (sucesso) ou 404 (código não encontrado). O 404 não será possível já que as listas de UFs e municipios são oficiais do próprio api e não há outra opção para o Usuário.

https://servicodados.ibge.gov.br/api/v1/localidades/estados?orderBy=nome [{"id":12,"sigla":"AC","nome":"Acre","regiao":{"id":1,"sigla":"N","nome":"Norte"}}]

GET https://servicodados.ibge.gov.br/api/v1/localidades/estados/{UF}/municipios https://servicodados.ibge.gov.br/api/v1/localidades/estados/{UF}/municipios?orderBy=nome [{"id":3300100,"nome":"Angra dos Reis","microrregiao":{"id":33013,"nome":"Baía da Ilha Grande","mesorregiao":{"id":3305,"nome":"Sul Fluminense","UF":{"id":33,"sigla":"RJ","nome":"Rio de Janeiro","regiao":{"id":3,"sigla":"SE","nome":"Sudeste"}}}},"regiao-imediata":{"id":330002,"nome":"Angra dos Reis","regiao-intermediaria":{"id":3301,"nome":"Rio de Janeiro","UF":{"id":33,"sigla":"RJ","nome":"Rio de Janeiro","regiao":{"id":3,"sigla":"SE","nome":"Sudeste"}}}}}]

Arquitetura

  • Como é um projeto pequeno, um MVC seria mais adequado e rápido. Porém, usando a Clean Arch fica mais fácil de escalar e dar manutenção, apesar da granulação maior.
  • Foram criadas 3 entidades (client, city, state), essa decisão tb teve como base escalabilidade.
  • Injeção de dependência eu fiquei na dúvida de onde colocar, infra ou core, mas decidi pela infra porque acredito que mesmo adicionando outras features a classe será usada apenas para o feature register.
  • Core, rotas e tema que são arquivos relacionados a todo o app, feature presente e futuras.

State Management

update RegisterCubit and InternetCubit

Internet Cubit to monitor the connectivity: package Connectivity_plus implemented as stream

  1. Register Cubit para registrar os dados

  2. Internet Cubit para checar se há conexão e depois monitorar a conexão de internet

SOLID

  • S As classes estão com apenas uma responsabilidade.
  • O O model (data/model) foi feito com herança (extends).
  • L substituição ok
  • I Interfaces foram implementadas.
  • D O projeto está dependendo de abstrações e não classes concretas.

Apresentação

  • No animated counter (projeto pessoal) tem uma animação usando flare, rive antigo. No atual eu precisarei de um tempo para aprender como usar, sendo assim não consegui colocar um fundo claro no canva e o Splashscreen ficou escuro. O problema é que dá um shock na transição para as páginas claras. Não mudei todos para escuro porque no final eu uso um rive que tem canva clara.
  • icon launcher modifiquei apenas o do Android, não alterei o ios e nem web.

Melhorias

  • Apesar das layers terem sido testadas, seria interessante colocar tratamentos de errors específicos. Nesse caso eu evitaria usar packages com either (fpdart e dartz) e tentaria fazer hardcore.
  • Melhoria no AppTheme (core layer).
  • ver atualizações nas classes do dart 3.0

Referências

  • Documentação do Flutter https://api.flutter.dev/index.html
  • Usei como referência os meus projetos de estudo, como são mais antigos, identifiquei algumas melhorias neles nessas consultas.

https://github.com/annealmd/tdd-medicamento https://github.com/annealmd/animated_counter

  • A minha base de estudo são: o Reso Coder, Fluttery e mais recente o Deivid Willyan (aprendendo dart backend).

https://www.youtube.com/watch?v=xV22lglBnig&t=932s&ab_channel=ResoCoder https://www.youtube.com/@Flutterly https://www.youtube.com/@FlutterCursos https://www.youtube.com/watch?v=0QgJWdbcHOY&ab_channel=WilliamSilva

jf_desafio's People

Contributors

annealmd avatar

Stargazers

 avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.