Настройка Flutter Analyzer для проверки кода
Flutter Analyzer — встроенный статический анализатор Dart/Flutter, основанный на dart analyze. Без настройки он уже работает в IDE, но в CI его часто игнорируют или запускают без правильных флагов. Результат: код с dynamic вместо типизированных переменных, неиспользуемые import-ы, deprecated API — всё это накапливается и мигрирует в продакшн.
analysis_options.yaml
Все настройки анализатора — в analysis_options.yaml в корне проекта:
include: package:flutter_lints/flutter.yaml
analyzer:
exclude:
- "**/*.g.dart"
- "**/*.freezed.dart"
- "lib/generated/**"
errors:
invalid_annotation_target: ignore # для freezed
language:
strict-casts: true
strict-inference: true
strict-raw-types: true
linter:
rules:
# Включаем дополнительно к flutter_lints
- always_use_package_imports
- avoid_dynamic_calls
- avoid_empty_else
- avoid_print
- avoid_relative_lib_imports
- avoid_slow_async_io
- avoid_type_to_string
- cancel_subscriptions
- close_sinks
- comment_references
- invariant_booleans
- literal_only_boolean_expressions
- no_adjacent_strings_in_list
- prefer_const_constructors
- prefer_const_declarations
- prefer_final_fields
- prefer_final_locals
- prefer_void_to_null
- unnecessary_await_in_return
- unnecessary_statements
- use_build_context_synchronously
strict-casts: true, strict-inference: true, strict-raw-types: true — три флага строгого режима. strict-inference особенно важен: запрещает неявный dynamic там, где тип не удаётся вывести.
Запуск в CI
- name: Analyze
run: flutter analyze --fatal-infos --fatal-warnings
- name: Check formatting
run: dart format --output=none --set-exit-if-changed lib/ test/
--fatal-infos превращает info-сообщения в ошибки. Жёстко, но эффективно: заставляет разработчиков не игнорировать мелкие замечания.
dart format --set-exit-if-changed проверяет форматирование без изменения файлов — если форматирование не соответствует dart format, CI падает.
Custom lint rules через dart_code_linter
Для более глубокого анализа — dart_code_linter (бывший dart_code_metrics):
# pubspec.yaml
dev_dependencies:
dart_code_linter: ^1.1.0
# analysis_options.yaml
dart_code_linter:
metrics:
cyclomatic-complexity: 20
lines-of-code: 100
number-of-parameters: 4
maximum-nesting-level: 5
metrics-exclude:
- test/**
rules:
- avoid-unnecessary-setstate
- prefer-extracting-callbacks
- avoid-returning-widgets
- check-for-equals-in-render-methods
avoid-returning-widgets и prefer-extracting-callbacks — Flutter-специфичные правила, которые стандартный анализатор не покрывает, а они напрямую влияют на rebuild-производительность.
Pre-commit интеграция
# .pre-commit-config.yaml
repos:
- repo: local
hooks:
- id: flutter-analyze
name: Flutter Analyze
language: system
entry: flutter analyze
types: [dart]
pass_filenames: false
- id: dart-format
name: Dart Format
language: system
entry: dart format --set-exit-if-changed
types: [dart]
Срок: 1 день. Стоимость рассчитывается индивидуально.







