O Google lançou o Dart 2.12, uma nova versão da linguagem usada para construir aplicativos em Flutter. O lançamento vem junto com o Flutter 2.0.
Com o lançamento do Flutter 2.0, o Google também está trazendo o Dart 2.12 para estável. Caso você não saiba, Dart é a linguagem que o Flutter usa. É uma linguagem baseada em TypeScript, mas vem com alguns acréscimos de recursos de linguagem, incluindo aqueles que estou prestes a abordar.
Segurança Nula
A segurança nula é um ótimo recurso de linguagem. Ele força você a considerar se uma variável algum dia será nula e a lidar explicitamente com possíveis situações nulas, ao mesmo tempo que permite garantir que variáveis específicas nunca serão nulas.
No Dart 2.12, agora há suporte total para segurança nula, com uma sintaxe semelhante a Swift e Kotlin. Existe até uma conversão inteligente, em que se o Dart tiver certeza de que uma variável normalmente anulável não pode ser nula, ele a converterá implicitamente em um formato não anulável.
Como a segurança nula é uma mudança (muito) significativa, esse recurso é opcional. Se você atualizar para o Dart 2.12, sua compilação não será interrompida e você não terá que gastar horas adicionando dicas de nulidade a tudo. Você pode até usar dependências seguras para nulos se o seu projeto ainda não for seguro para nulos.
Depois de decidir migrar, você pode usar a ferramenta de migração integrada (dardo migrar) e/ou o guia de migração para configurar tudo.
Além disso, embora a segurança nula esteja incluída no Dart 2.12, se você criar um novo projeto Flutter, a segurança nula não será habilitada imediatamente. Você precisará habilitá-lo manualmente. Novos projetos Dart terão segurança nula habilitada.
Interface de Função Estrangeira
Embora o foco do Dart (e do Flutter) seja a compatibilidade total entre plataformas, ainda há algumas coisas que só precisam ser feitas nativamente. Para facilitar as operações nativas, o Dart possui uma interface de função estrangeira, ou FFI. O FFI permite interagir com o código C do Dart sem ter que recorrer a chamadas de API estranhas baseadas em strings ou outros métodos de interoperabilidade desajeitados.
E com o Dart 2.12, o FFI agora está estável, o que significa que está pronto para ser usado em projetos de produção e com muitos recursos completos.
Com isso em mente, há algumas mudanças no FFI, incluindo algumas que quebram.
A maior parte do foco desta versão foi em como as estruturas podem ser usadas com Dart e C. Por um lado, agora você pode passar estruturas em seu código C por referência e valor, onde anteriormente apenas referências eram suportadas. Outro recurso importante é o suporte para estruturas aninhadas, que não existiam antes desta versão.
Agora, para as mudanças radicais. Se você estava usando o FFI, pode ser necessário atualizar seu código para funcionar com 2.12. Com esta versão do FFI, você não pode mais criar estruturas vazias. Se precisar de um por algum motivo, você pode usar o novo tipo “Opaco”. Há também algumas mudanças na forma como algumas das funções integradas do FFI funcionam, que você pode leia sobre aqui.
Finalmente, há um novo pacote para o FFI que permite gerar wrappers FFI a partir de arquivos de cabeçalho C existentes, chamado figura. Se você tiver muito código C que precisa usar, com muitos métodos de API, isso será muito útil. Mesmo que a quantidade de código C que você possui seja pequena, esse é um recurso interessante e conveniente.
E isso é tudo para o Dart 2.12. Com a adição de segurança nula e uma biblioteca de interoperabilidade C estável, o Dart está se transformando em uma linguagem muito rica em recursos. Deixe-nos saber o que você pensa sobre o Dart 2.12 nos comentários!