# Flutter

Flutter é um kit de desenvolvimento de software de interface de usuário (toolkit e framework), de código aberto, criado pela empresa Google em 2015, baseado na linguagem de programação Dart, que possibilita a criação de aplicativos para Web (através de WebAssembly) e para os sistemas operacionais Android, iOS, Windows, macOS, Linux e Fuchsia.

## História

A primeira versão do Flutter era conhecida com o codinome "Sky" e era executada no sistema operacional Android. Foi apresentado na cúpula de desenvolvedores Dart de 2015, com a intenção declarada de ser capaz de renderizar consistentemente a 120 quadros por segundo. Durante a keynote do Google Developer Days em Xangai, o Google anunciou o Flutter Release Preview 2, que é o último grande lançamento antes do Flutter 1.0. Em 4 de dezembro de 2018, o Flutter 1.0 foi lançado no evento Flutter Live, denotando a primeira versão "estável" do Framework. Em 11 de dezembro de 2019, o Flutter 1.12 foi lançado no evento Flutter Interactive.
Em 6 de maio de 2020 foi lançado o Dart SDK na versão 2.8 e o Flutter na versão 1.17.0, onde foi adicionado suporte a API Metal, melhorando o desempenho em dispositivos iOS (50% aproximadamente), novos widgets do Material Design, além de novas ferramentas de rastreamento de rede.$^[$

## Arquitetura do Framework

Os principais componentes do Flutter incluem:
* Linguagem de programação Dart
* Flutter Engine
* Biblioteca Foundation
* Design-specific Widgets com implementações prontas para Android (Google Material) e iOS (Cupertino)

### Linguagem de programação Dart

Os aplicativos Flutter são escritos na linguagem de programação Dart e fazem uso de muitos dos recursos mais avançados da linguagem.
No Windows, macOS e Linux, por meio do projeto semi-oficial Flutter Desktop Embedding, o Flutter é executado na máquina virtual Dart, que possui um mecanismo de compilação que ocorre em tempo de execução. Ao escrever e depurar um aplicativo, o Flutter usa a compilação JIT, permitindo o hot reload, com a qual as modificações nos arquivos de origem podem ser injetadas em um aplicativo em execução. O Flutter estende isso com suporte para hot reload de stateful widgets, onde na maioria dos casos as alterações no código-fonte podem ser refletidas imediatamente no aplicativo em execução, sem a necessidade de uma reinicialização ou perda de estado.
As versões de lançamento dos aplicativos Flutter são compiladas com a compilação antecipada (AOT) no Android e no iOS, possibilitando o alto desempenho do Flutter em dispositivos móveis.

### Flutter Engine

A engine do Flutter, escrito principalmente em C++, fornece suporte de renderização de baixo nível usando a biblioteca de gráficos Skia do Google. Além disso, ele faz interface com SDKs específicos da plataforma, como os fornecidos pelo Android e iOS. O Flutter Engine é um runtime portátil para hospedar aplicativos em Flutter. Ele implementa as bibliotecas principais do Flutter, incluindo animação e gráficos, I/O de arquivos e rede, suporte à acessibilidade, arquitetura de plugins e um conjunto de ferramentas de tempo de execução e compilação do Dart. A maioria dos desenvolvedores irá interagir com o Flutter por meio do Flutter Framework, que fornece uma estrutura moderna e reativa e um rico conjunto de platform, layout e foundation widgets.

### A biblioteca Foundation

A biblioteca Foundation, escrita em Dart, fornece classes e funções básicas que são usadas para construir aplicativos usando o Flutter, como APIs para se comunicar com a engine.

### Design-specific Widgets (Identidade Visual)

O framework Flutter contém dois conjuntos de widgets que estão em conformidade com linguagens de design específicas. Os widgets do Material Design implementam a identidade visual do Google e os widgets do Cupertino implementam as diretrizes de interface humana para iOS da Apple.

## Exemplo

Um programa Olá Mundo do Flutter se parece com: