O que você sabe sobre a estrutura interna do Flutter?
sobes.tech IA
Resposta da IA
O núcleo do Flutter consiste no motor, na estrutura e nos widgets.
-
Motor Flutter: Escrito em C++ e fornece uma API de baixo nível para renderização, manipulação de texto, threads e plugins. Interage diretamente com a plataforma (iOS, Android, Web, Desktop) e APIs gráficas (por exemplo, Skia). O motor gere a renderização, operações assíncronas e o ciclo de vida da aplicação.
-
Estrutura Flutter (Framework): Escrito em Dart e fornece uma camada de abstração sobre o motor. Inclui vários componentes prontos a usar:
- Fundação: Classes básicas e funções auxiliares.
- Renderização: Camada para gerir a árvore de objetos de renderização e o seu desenho.
- Widgets: Blocos básicos de construção de UI que formam a árvore de widgets.
- Material Design e Cupertino: Conjuntos de widgets que implementam estilos Material Design e design ao estilo iOS.
-
Widgets: Em Flutter tudo é um widget. Os widgets descrevem a configuração da UI. Existem dois tipos principais:
- StatelessWidget: Widget sem estado interno mutável. A sua UI depende apenas dos seus parâmetros de entrada (
properties). - StatefulWidget: Widget que pode ter um estado mutável. Consiste no próprio widget e num objeto
State, onde se armazena o estado e a lógica de construção da UI (build).
- StatelessWidget: Widget sem estado interno mutável. A sua UI depende apenas dos seus parâmetros de entrada (
Processo de renderização:
- Build: O framework chama o método
build()do widget, que devolve uma árvore de outros widgets. - Árvore de Elementos: Com base na árvore de widgets, é criado uma árvore de elementos (
Element Tree), que representa a estrutura da UI. Os elementos ligam os widgets aos objetos de renderização correspondentes. - Árvore de Objetos de Renderização: Os elementos criam e gerem a árvore de objetos de renderização (
Render Object Tree). Os objetos de renderização são responsáveis pelo layout, pintura e hit testing. - Pintura: O motor usa Skia (em dispositivos móveis e desktop) ou CanvasKit (na web) para desenhar os objetos de renderização na tela.
Programação reativa:
Flutter usa uma abordagem reativa para construir a UI. Quando o estado muda, o framework reconstrói essa parte da árvore de widgets que depende dele. Isto é feito de forma automática e eficiente graças ao mecanismo de diffing e à rápida criação e destruição de widgets.
Recarregamento a quente (Hot Reload) e Reinício a quente (Hot Restart):
- Hot Reload: Insere o código Dart atualizado na aplicação em execução sem perder o estado. Ideal para iteração rápida de UI.
- Hot Restart: Reinicia a aplicação do zero com o código atualizado e o estado reiniciado. Utilizado quando o Hot Reload não funciona, por exemplo, ao fazer alterações em
initStateou variáveis globais.
Código específico de plataforma:
Flutter permite interagir com as APIs nativas da plataforma através de canais de plataforma (Platform Channels). Isto permite chamar métodos do código nativo (Java/Kotlin no Android, Swift/Objective-C no iOS) e receber os resultados de volta em Dart.
// Exemplo de uso do Canal de Plataforma
import 'package:flutter/services.dart';
static const platform = MethodChannel('samples.flutter.dev/battery');
Future<void> getBatteryLevel() async {
String batteryLevel;
try {
final int result = await platform.invokeMethod('getBatteryLevel');
batteryLevel = 'Nível da bateria: $result %.';
} on PlatformException catch (e) {
batteryLevel = "Não foi possível obter o nível da bateria: '${e.message}'.";
}
// Atualizar UI
}