Skip to main content

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

TipoClasseArquivo
Widget simplesBotaoPrimarioWidgetbotao_primario_widget.dart
Componente reutilizávelCardUsuarioComponentcard_usuario_component.dart
Tela completaLoginScreenlogin_screen.dart
Widget customizado pequenoTooltipInformativoWidgettooltip_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 lowerCamelCase para variáveis, métodos e parâmetros.
  • Use PascalCase apenas para tipos (classes, enums, typedefs).
  • Evite siglas inteiras em maiúsculo (ex.: prefira HttpService a HTTPService).
  • Nomes de arquivos sempre em snake_case.

8. Resumo Rápido

TipoPadrãoExemplo
Variáveis locaiscamelCasenomeFuncionario
MétodoscamelCaseobterGerenciadorAsync()
ClassesPascalCaseUsuarioService
InterfacesI + PascalCaseIUsuarioRepository
ConstantesSCREAMING_SNAKE_CASEDEFAULT_TIMEOUT
EnumsPascalCase (valores camelCase)enum Estado { ativo, inativo }
WidgetsSufixo WidgetBotaoPrimarioWidget
ScreensSufixo ScreenLoginScreen