Roteiro Altamente Subjetivo para Desenvolvimento com Flutter
Published: 2024-04-18 15:07:40

Roteiro Altamente Subjetivo para Desenvolvimento com Flutter



![Roadmap Flutter](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o3m2qgvx0iss52lz8dhp.jpg)

## 1

Independentemente de estar usando o Android Studio ou o VSC, dedique tempo para aprender atalhos e plugins da IDE. Investir algumas horas nisso vai valer a pena a longo prazo, economizando tempo e esforço. Vale a pena aprender o Flutter CLI, já que algumas tarefas são mais rápidas de serem realizadas pela linha de comando.

Também é importante desenvolver o hábito de usar um sistema de controle de versão o mais cedo possível. O Git é atualmente a opção mais popular. Embora usar a linha de comando possa parecer legal, recomendo utilizar um cliente Git amigável como Fork, Sourcetree, ou um integrado à sua IDE.

## 2

É importante seguir o estilo de código, mas se você é totalmente novo nisso, pode adicionar frustração, então sinta-se à vontade para pular isso por agora, mas retorne a ele mais tarde.

O manual "Effective Dart" é o caminho a seguir. Use um linter rigoroso como o very_good_analysis desde o início.

Quando se trata de Programação Orientada a Objetos (OOP) e Programação Funcional, é melhor começar com o básico. Não se preocupe com padrões complexos ou conceitos como monads por enquanto. Concentre-se em aprender os fundamentos e desenvolver suas habilidades gradualmente.

## 3

Assista ao [Widget of the Week](https://youtube.com/playlist?list=PLjxrf2q8roU23XGwz3Km7sQZFTdB996iG&si=ggNaYUo7MbJHBxMm) no Youtube, explore os conceitos de Material Design, e familiarize-se com os widgets básicos do Flutter que estão sendo disponibilizados.

O programa [Package of the Week](https://youtube.com/playlist?list=PLjxrf2q8roU1quF6ny8oFHJ2gBdrYN_AK&si=VoupD0boCZsgEegy) irá apresentar alguns dos widgets e pacotes de terceiros mais populares disponíveis para o Flutter.

## 4

Os padrões de design são os blocos de construção para desenvolver aplicações robustas. Compreender esses padrões é essencial para o desenvolvimento avançado e para obter um entendimento mais profundo do próprio framework. Além disso, esses padrões são universais e não específicos para nenhum framework ou linguagem de programação em particular. Portanto, investir tempo em estudá-los é uma escolha sábia para o trabalho de desenvolvimento futuro. Para começar a aprender sobre padrões de design, o antigo livro "Gang of Four" é um ótimo recurso.

## 5

Manter o princípio KISS (Keep It Simple, Stupid) e DRY (Don't Repeat Yourself) como foco tático durante o desenvolvimento de software é importante, mas também é essencial construir sobre uma base sólida de princípios estratégicos como SOLID. O livro "Clean Code" de Uncle Bob é um recurso valioso que ajudará em todas essas áreas. Sugiro usar Provider ou get_it para injeção de dependência. Se estiver se sentindo aventureiro e quiser experimentar geração de código, o pacote injectable é uma excelente opção.

## 6

É importante entender como funciona a comunicação entre front-end e back-end e os detalhes por trás das redes. Utilize a geração de código em produção.

Retrofit, Dio e Json Serializable são ótimos aliados aqui.

Se você estiver interessado em GraphQL, experimente o Ferry.

## 7

Armazenar dados é um requisito comum para quase todo aplicativo, mas nem todo aplicativo precisa de uma solução de armazenamento extensa. Em muitos casos, é melhor manter as coisas simples e usar persistência básica quando for suficiente. O plugin shared_preferences, ou suas alternativas, podem ser uma boa opção a considerar para esse propósito.

## 8

Quando você precisa aumentar a capacidade de armazenamento dos seus dados, pode ser hora de considerar soluções mais maduras, ou até mesmo opções baseadas em nuvem.

## 9

Está tudo bem desenvolver aplicativos com Provider, desde que você siga alguns acordos ou padrões arquiteturais. Você pode querer mudar para flutter_bloc, flutter_mobx, async_redux, ou outros padrões mais conscientes da arquitetura.

Suami: Leve em consideração que packages não oficiais podem depender de seus respectivos mantenedores e que por isso pode cair em desuso ou sofre falta de atualizações. (Importante levar em consideração para o tipo de projeto).

## 10

Quando se trata de escrever aplicativos rapidamente, a chave é escrevê-los corretamente desde o início. Para fazer isso, comece com a abordagem TDD (Test Driven Development) e depois faça a transição para BDD (Behavior Driven Development). O livro de Kent Beck, "Test Driven Development by Example", é um ótimo recurso para começar com TDD. Além disso, a série "Clean Code" do Uncle Bob cobre o tópico em profundidade.

## 11

Aprender o desenvolvimento nativo de aplicativos móveis pode ajudá-lo a obter uma compreensão mais profunda da plataforma subjacente, o que pode ser valioso para corrigir problemas com bibliotecas de terceiros ou desenvolver seus próprios plugins. Para começar, faça o curso da Udacity para Android e o curso de Stanford para iOS. FFIgen e JNIgen nos ajudarão a acessar seu código nativo.

## 12

Agora é hora de entender como o async/await realmente funciona e por que o stateless é benéfico. O uso de pacotes como freezed pode ajudar a melhorar o gerenciamento de modelos, enquanto fpdart ou dartz podem tornar seu código mais elegante. Para um entendimento mais profundo, recomendo fazer um curso básico sobre Closure de C#.

## 13

Criar seu próprio plugin pode ser um desafio emocionante! Se estiver se sentindo confiante, desafie-se criando um plugin com uma visualização nativa. E se isso não for o bastante, certifique-se de testar minuciosamente seu plugin e garantir que não haja vazamento de memória. É uma excelente maneira de expandir suas habilidades e contribuir para a comunidade de desenvolvimento. Boa sorte!

## 14

Entender como encontrar vazamentos de memória e identificar problemas de desempenho é crucial para o desenvolvimento eficiente de aplicativos. Você pode começar assistindo a uma palestra de Filip Hracek sobre esse tema no Flutter Europe, disponível no YouTube. Isso fornecerá uma base sólida para melhorar a qualidade e o desempenho dos seus aplicativos Flutter.

## 15

Para obter um entendimento mais profundo do framework, reserve um tempo para aprender sobre o pipeline de renderização do Flutter e como ele organiza seus widgets. Confira recursos como "Flutter's Rendering Pipeline" de Ian Hickson para começar. Isso ajudará você a compreender melhor o funcionamento interno do Flutter e a otimizar o desempenho de seus aplicativos.

## 16

Descobrir que alguém roubou seu aplicativo e o publicou sob um nome diferente seria desanimador e frustrante. O MASVS (Mobile Application Security Verification Standard) pode ajudá-lo a considerar e abordar diferentes cenários de segurança, incluindo esse. Além disso, o freeRASP é uma maneira simples, embora não suficiente por si só, de proteger seu aplicativo contra várias ameaças de segurança. Ao implementar medidas de segurança adequadas, você pode ajudar a proteger seu aplicativo e os dados dos usuários contra esses tipos de ataques e violações de segurança.

## 17

Ao aproveitar o poder do Flutter, você pode criar aplicativos que não são limitados pelas restrições dos smartphones - não se esqueça de explorar também desktop e web.

Se estiver interessado no desenvolvimento full stack, frameworks como dart_frog podem valer a pena conferir. Eles oferecem uma abordagem abrangente para o desenvolvimento de aplicativos, cobrindo tanto o frontend quanto o backend, utilizando a linguagem Dart em toda a pilha de tecnologia. Isso pode proporcionar uma experiência de desenvolvimento mais integrada e eficiente para projetos complexos.


## 18

Evite construir builds de produção a partir da pasta de desenvolvimento local. Em vez disso, considere usar ferramentas como Codemagic, Travis, GitHub Actions, Circle CI, ou registrar sua máquina de desenvolvimento como um nó CI para GitLab CI. Construir um ciclo de vida de desenvolvimento de software e coletar cobertura de código e outras métricas ajudará a manter a qualidade do código. Confira o Danger, SonarQube e, mais importante, FastLane. Um linter estrito é indispensável aqui. Isso garantirá que seu código esteja em conformidade com padrões de codificação consistentes e ajudará a detectar problemas potenciais antes que eles se tornem problemas reais.

## 19

A análise é essencial para entender como os usuários interagem com seu aplicativo e para tomar decisões orientadas por dados. Firebase Analytics, Firebase Crashlytics e DataDog são apenas algumas das muitas plataformas que oferecem recursos de análise gratuitamente. Ao usar essas ferramentas, você pode acompanhar o desempenho do seu aplicativo, identificar problemas e oportunidades de melhoria e tomar decisões informadas para melhorar a experiência do usuário.

## 20

Você tem a responsabilidade de orientar seus clientes sobre o que é possível e o que não é em termos de conformidade legal. Isso inclui o cumprimento das leis de privacidade, como GDPR e CCPA, além de aderir às políticas e diretrizes da loja de aplicativos. É fundamental garantir que seu aplicativo esteja em conformidade com todas as regulamentações relevantes e políticas da plataforma para evitar problemas legais e garantir a confiança dos usuários.

## Links
### Ambiente de desenvolvimento
[Android Studio Shortcuts](https://developer.android.com/studio/intro/keyboard-shortcuts) - Atalhos para acelerar o desenvolvimento no Android Studio.
VSCode Shortcuts for [Windows](https://code.visualstudio.com/shortcuts/keyboard-shortcuts-windows.pdf), [macOS](https://code.visualstudio.com/shortcuts/keyboard-shortcuts-macos.pdf) - Atalhos para acelerar o desenvolvimento no VSCode.
[Flutter CLI](https://docs.flutter.dev/reference/flutter-cli) - Explicação detalhada de todos os comandos Flutter CLI.
[Dart CLI](https://dart.dev/tools/dart-tool) - Explicação detalhada de todos os comandos Dart CLI (dart fix pode ser bastante útil no desenvolvimento diário).
[DartPad](https://dartpad.dev/) - Uma ferramenta para criar conteúdo educacional eficaz e envolvente para usuários de Dart e Flutter.
[DartPad Documentation](https://dart.dev/tools/dartpad) - Documentação do DartPad em dart.dev.
[Zapp!](https://zapp.run/) - Ambiente sandbox on-line gratuito para criar e compartilhar aplicativos Dart e Flutter, com suporte a todos os pacotes pub.dev, análise estática, incorporação, visualização e muito mais.
[Interactive Git learning online](https://learngitbranching.js.org/?locale=pt_BR) - Aprenda comandos git de forma interativa no site learngitbranching.

### Linguagem
https://dart.dev/guides/language/language-tour - Um breve tour pela linguagem Dart.
https://dart.dev/guides/language/effective-dart - Um guia para escrever um código Dart melhor.
https://dart.dev/guides/language/analysis-options - Um guia de configuração de análise estática.
https://dart.dev/guides/language/sound-problems - Um guia sobre como corrigir problemas comuns no código Dart.
https://dart.dev/tools/linter-rules - Uma lista de todas as regras do Dart linter disponíveis.
[Dart Code Metrics](https://dcm.dev) - Uma ferramenta para ajudá-lo a gerenciar a qualidade e a consistência do código (fornece regras adicionais de lint, métricas de código e muito mais).

### Widgets Básicos
[Widget of the Week playlist](https://youtube.com/playlist?list=PLjxrf2q8roU23XGwz3Km7sQZFTdB996iG)
[Package of the Week playlist
](https://youtube.com/playlist?list=PLjxrf2q8roU1quF6ny8oFHJ2gBdrYN_AK)https://flutter.dev/docs/development/ui/widgets-intro
http://material.io
https://developer.apple.com/design/

### Core Design Patterns
https://en.wikipedia.org/wiki/Design_Patterns
[The "Gang of Four" aka "Design Patterns: Elements of Reusable Object-Oriented Software" book](https://en.wikipedia.org/wiki/Design_Patterns)
[Flutter Design Patterns](https://flutterdesignpatterns.com/)
[Refactoring Guru](https://refactoring.guru/design-patterns)

### Princípios Core Design
https://en.wikipedia.org/wiki/KISS_principle
https://en.wikipedia.org/wiki/Don%27t_repeat_yourself
https://en.wikipedia.org/wiki/SOLID
https://cleancoders.com
https://pub.dev/packages/provider
https://pub.dev/packages/get_it
https://pub.dev/packages/injectable

### Networking
https://en.wikipedia.org/wiki/Representational_state_transfer
https://pub.dev/packages/retrofit
https://pub.dev/packages/json_serializable

### Persistência Simples
https://pub.dev/packages/shared_preferences
https://pub.dev/packages/flutter_secure_storage

### Database
https://pub.dev/packages/isar
https://pub.dev/packages/sqflite
https://pub.dev/packages/firebase_storage
https://pub.dev/packages/cloud_firestore
https://pub.dev/packages/icloud_storage

### Arquitetura
https://fluttersamples.com
https://pub.dev/packages/async_redux
https://pub.dev/packages/flutter_mobx
https://pub.dev/packages/flutter_bloc

### Teste
https://en.wikipedia.org/wiki/Test-driven_development
https://en.wikipedia.org/wiki/Behavior-driven_development
https://www.amazon.com/Test-Driven-Development-Kent-Beck/dp/0321146530

### Outras linguagens
https://www.udacity.com/course/developing-android-apps-with-kotlin--ud9012
https://cs193p.sites.stanford.edu

### Dart
https://pub.dev/packages/freezed
https://fsharpforfunandprofit.com

### Package Manager
[Developing packages & plugins](https://flutter.dev/docs/development/packages-and-plugins/developing-packages) - How to develop packages and plugins for Flutter.
[CocoaPods](https://cocoapods.org/) - package manager for Swift and Objective-C projects.
[Gradle](https://docs.gradle.org/current/userguide/userguide.html) - build automation system and package manager for Android.

### Profiling
https://flutter.dev/docs/perf/rendering/ui-performance
https://youtu.be/vVg9It7cOfY

### Flutter Interno
https://youtu.be/UUfXWzp0-DU
https://youtu.be/dkyY9WCGMi0
http://www.cs.cmu.edu/~bam/uicourse/830spring20/05-830-2020-03-23-Lecture-10-Flutter.mp4
https://mrale.ph/dartvm/
https://surf.dev/flutter-under-the-hood/
https://docs.flutter.dev/resources/architectural-overview
https://surf.dev/flutter-architecture-guide/

### Segurança
[OWASP MASVS](https://owasp.org/www-project-mobile-app-security/) - Mobile Application Security Verification Standard
https://pub.dev/packages/freerasp

### Integração Continua
https://fastlane.tools
https://danger.systems
https://www.sonarqube.org
https://codemagic.io/
https://travis-ci.org

### Analytics - Análises Métricas
https://firebase.google.com/docs/analytics
https://docs.microsoft.com/en-us/appcenter/analytics/
https://developer.mixpanel.com/docs/flutter
https://docs.smartlook.com/docs/sdk/flutter
https://pub.dev/packages/datadog_flutter_plugin

### Store - Loja
https://developer.apple.com/app-store/review/guidelines/
https://play.google.com/about/developer-content-policy/
https://developer.android.com/distribute/best-practices/launch/launch-checklist


Agora finalmente você é um desenvolvedor(a) Flutter Senior! Parabéns.


Ps: Com o tempo vou atualizando o artigo e adicionando mais coisas, então já salva se for importante pra você é claro.


Muito obrigada!

Roteiro Altamente Subjetivo para Desenvolvimento com Flutter
por Oleksandr Leushchenko (@olexale)
traduzido por Suami Rocha

Faça uma cópia da imagem no figma:
https://www.figma.com/community/file/1362804868277413920/roadmap-flutter-2024