Guia de Nomenclatura — Padrões de Código | Flutter
Este guia define os padrões de nomenclatura e estrutura de código adotados para manter consistência, legibilidade e boas práticas em projetos Flutter e Dart.
1. Métodos e Variáveis Locais
Regras
- Utilize camelCase para nomes de variáveis e métodos.
- Nomes devem ser claros, descritivos e autoexplicativos.
- Métodos assíncronos devem conter o sufixo
Async.
Exemplo
void obterGerenciador() {
var nomeFuncionario = "Adolfo";
}
Future<void> carregarDadosAsync() async {
final resultado = await apiService.obterListaAsync();
}
Evite abreviações genéricas como data, info, obj, etc.
2. Enumerações (Enums)
Regras
- Nome do enum deve usar PascalCase.
- Os valores internos devem usar camelCase.
- Evite atribuir valores explícitos a menos que necessário.
Exemplo
enum EstadoVendedor {
loading,
loaded,
error,
}
3. Classes e Interfaces
Regras
- Nome de classe deve usar PascalCase.
- Interfaces devem começar com o prefixo I (ex.:
IRepository). - Classes devem representar substantivos (ex.:
UsuarioService). - Métodos devem representar verbos (ex.:
calcularTotal()).
Exemplo
class GerenciadorFuncionarios {}
abstract class IFuncionarioRepository {
Future<List<Funcionario>> obterFuncionariosAsync();
}
4. Propriedades e Constantes
Regras
- Propriedades usam camelCase.
- Constantes usam SCREAMING_SNAKE_CASE.
- Propriedades privadas usam o prefixo
_.
Exemplo
class Funcionario {
final String nomeFuncionario;
int idade;
static const int IDADE_MINIMA = 18;
Funcionario(this.nomeFuncionario, this.idade);
void _calcularBonusInterno() {}
}
Use final para valores imutáveis após inicialização e const para constantes de tempo de compilação.
5. Widgets, Componentes e Telas
Regras
- Widgets devem ter o sufixo Widget.
- Telas completas devem ter o sufixo Screen.
- Componentes reutilizáveis podem ter o sufixo Component (opcional).
- Nomes de arquivos devem usar snake_case (letras minúsculas e
_).
Exemplos
| Tipo | Classe | Arquivo |
|---|---|---|
| Widget simples | BotaoPrimarioWidget | botao_primario_widget.dart |
| Componente reutilizável | CardUsuarioComponent | card_usuario_component.dart |
| Tela completa | LoginScreen | login_screen.dart |
| Widget customizado pequeno | TooltipInformativoWidget | tooltip_informativo_widget.dart |
Exemplo de Widget
class TooltipInformativoWidget extends StatelessWidget {
const TooltipInformativoWidget({super.key});
Widget build(BuildContext context) {
return Tooltip(
message: 'Busca limitada a 100 resultados.',
child: Icon(Icons.info),
);
}
}
6. Estrutura de Pastas Recomendada
lib/
├── main.dart
├── screens/
│ ├── login_screen.dart
│ └── home_screen.dart
├── components/
│ ├── botao_primario_component.dart
│ └── tooltip_informativo_widget.dart
├── widgets/
│ ├── texto_personalizado_widget.dart
│ └── campo_input_widget.dart
├── models/
│ └── usuario_model.dart
├── services/
│ └── autenticacao_service.dart
├── repositories/
│ └── iusuario_repository.dart
├── utils/
│ └── formatters.dart
└── constants/
└── app_constants.dart
Manter uma estrutura de pastas clara facilita a manutenção, escalabilidade e entendimento do projeto.
7. Boas Práticas
- Use nomes curtos e descritivos.
- Prefira clareza a abreviações.
- Use
lowerCamelCasepara variáveis, métodos e parâmetros. - Use
PascalCaseapenas para tipos (classes, enums, typedefs). - Evite siglas inteiras em maiúsculo (ex.: prefira
HttpServiceaHTTPService). - Nomes de arquivos sempre em snake_case.
8. Resumo Rápido
| Tipo | Padrão | Exemplo |
|---|---|---|
| Variáveis locais | camelCase | nomeFuncionario |
| Métodos | camelCase | obterGerenciadorAsync() |
| Classes | PascalCase | UsuarioService |
| Interfaces | I + PascalCase | IUsuarioRepository |
| Constantes | SCREAMING_SNAKE_CASE | DEFAULT_TIMEOUT |
| Enums | PascalCase (valores camelCase) | enum Estado { ativo, inativo } |
| Widgets | Sufixo Widget | BotaoPrimarioWidget |
| Screens | Sufixo Screen | LoginScreen |