Tutorial: Como Usar Extensions no Flutter
O que são Extensions no Dart?
As Extensions, introduzidas no Dart 2.7, permitem adicionar funcionalidades a classes existentes sem precisar modificá-las diretamente. Isso é útil para estender o comportamento de classes externas ou integrar novas funcionalidades em seu código.
Por que usar Extensions?
Extensions ajudam a manter o código limpo e reutilizável. Alguns casos de uso incluem:
- Adicionar métodos de conveniência a classes padrão.
- Evitar duplicação de código ao reutilizar lógica em vários lugares.
- Aumentar a legibilidade do código.
Exemplo Básico
Vamos criar uma extensão para a classe String
que adiciona um método para capitalizar a primeira letra de um texto:
extension StringExtensions on String {
String capitalize() {
if (this.isEmpty) return this;
return this[0].toUpperCase() + this.substring(1);
}
}
void main() {
String texto = "flutter é incrível!";
print(texto.capitalize()); // Output: Flutter é incrível!
}
Como funciona?
No exemplo acima:
- extension StringExtensions on String: Define uma extensão para a classe
String
. - capitalize: Adiciona um novo método que pode ser chamado em qualquer objeto do tipo
String
.
Extensions com Tipos Genéricos
Extensions também podem ser usadas com tipos genéricos. Vamos criar uma extensão para listas que retorna os elementos duplicados:
extension ListExtensions on List {
List duplicates() {
return this.toSet().where((item) => this.where((x) => x == item).length > 1).toList();
}
}
void main() {
List numeros = [1, 2, 3, 2, 4, 1];
print(numeros.duplicates()); // Output: [1, 2]
}
Limitando o Escopo de Extensions
Nem todas as extensions precisam estar disponíveis globalmente. Você pode colocá-las em arquivos separados e importar apenas quando necessário:
// Arquivo string_extensions.dart
extension StringExtensions on String {
String reverse() {
return split('').reversed.join();
}
}
// Arquivo principal
import 'string_extensions.dart';
void main() {
String texto = "Dart";
print(texto.reverse()); // Output: traD
}
Boas Práticas
- Mantenha as extensions simples e específicas.
- Evite adicionar métodos que possam causar confusão ou conflito com métodos existentes.
- Documente bem as extensions para facilitar o uso por outros desenvolvedores.
Conclusão
As Extensions são uma ferramenta poderosa no Dart que permitem estender funcionalidades de forma elegante e eficiente. Elas ajudam a escrever código mais limpo, reutilizável e fácil de manter.