4.8 KiB
Стиль кода
Мы придерживаемся рекомендаций, описанных в Effective Dart
Перед каждым PR необходимо отформатировать код и проверить анализатор на отсутствие сообщений.
Именование
Интерфейсы
Утверждены два вида объявления интерфейсов:
- Все интерфейсы в приложении должны начинаться с заглавной буквы "I".
Например: IAuthRepository, IProfileRepository, IMainRunner и т.д.
Таким образом, сразу видно, что работаешь с интерфейсом. Пример:
/// Интерфейс - **IUserRepository**
abstract interface class IUserRepository {}
/// Основная реализация (prod и stage окружения)
class UserRepository implements IUserRepository {}
/// Иная реализация (мок, локальное хранилище) должна содержать
/// постфикс функциональности:
/// - Network - сетевое взаимодействие.
/// - Local - локальное хранилище.
/// - Mock - мок репозиторий.
class UserRepositoryLocal implements IUserRepository {}
Классы - Репозитории
Репозитории должны содержать в конце название источника данных (если используется мок или локальное хранилище).
Основная реализация, не должна содержать постфикса.
Например: Интерфейс - IAuthRepository
Основная реализация (prod и stage окружения) - AuthRepository
Мок (мок данные) - AuthRepositoryMock
Локальное хранилище (например бд или просто имитация данных) - AuthRepositoryLocal
Файлы
Используется snake_case. Название файла должно иметь следующую структуру: [раздел]_[тип].dart
Пример: user_details_screen.dart, shop_entity.dart
Классы
Название классов UpperCamelCase. Для создание приватных классов используем префикс _ . Название класса в конце должно содержать в себе тип.
Пример: UserEntity, AdultDialog
Методы
Название метода в начале должно содержать в себе действие(глагол):
- fetch
- put
- update
- delete и так далее
Пример:
int fetchFirstElement(){}
Пример:
void updateFirstElement(){};
Название метода не должно содержать в себе And/Or и метод соответственно не должен выполнять подобную логику.
Переменные и константы
Константы именуются также lowerCamelCase. Пример:
const String carItem
или
final userName;
Виджеты
Виджеты именуются UpperCamelCase. В названии виджетов не должно содержаться слово widget.
Экраны
Экраны, используемые в роутинге, именуются с постфиксом Screen. Например, ShopListScreen.
Содержимое экрана
Виджеты, отображающие содержимое экрана, именуются с постфиксом View. Например, ShopListView.
Глобальные виджеты
Глобальные виджеты именуются с приставкой App. Например, AppButton.
Структура класса
Объявления элементов класса должны располагаться в следующем порядке:
- Constructors
- constructors
- named-constructors
- factory-constructors
- Static
- public-static-methods
- private-static-methods
- public-static-const-fields
- private-static-const-fields
- public-static-final-fields
- private-static-final-fields
- public-static-fields
- private-static-fields
- Fields
- public-final-fields
- private-final-fields
- public-fields
- private-fields
- Getters/Setters
- public-getters-setters
- private-getters-setters
- Methods
- overridden-methods
- public-methods
- protected-methods
- private-methods