# Installation

<div id="install"></div>

Три команды превращают пустую папку в работающее Flutter-приложение с уже настроенными маршрутизацией, сетью, темами и генерацией кода.

<div class="ny-doc-strip">
<span class="ny-doc-strip-label">Перед началом</span>
<span class="ny-doc-strip-item">Flutter SDK установлен</span>
<span class="ny-doc-strip-dot"></span>
<span class="ny-doc-strip-item">Dart 3</span>
<span class="ny-doc-strip-dot"></span>
<a href="/ru/docs/7.x/requirements">Полные требования →</a>
</div>

## Установка

Выполните эти команды по порядку. Каждую из них можно безопасно запустить повторно.

<div class="ny-doc-steps">
<div class="ny-doc-step">
<span class="ny-doc-step-num">1</span>
<h3 class="ny-doc-step-title">Установите Nylo CLI глобально</h3>

Устанавливает команду `nylo` в вашу систему.

``` bash
dart pub global activate nylo_installer
```

</div>

<div class="ny-doc-step">
<span class="ny-doc-step-num">2</span>
<h3 class="ny-doc-step-title">Создайте новый проект</h3>

Эта команда клонирует шаблон Nylo, настраивает проект с вашим именем приложения и автоматически устанавливает все зависимости.

``` bash
nylo new my_app
```

</div>

<div class="ny-doc-step">
<span class="ny-doc-step-num">3</span>
<h3 class="ny-doc-step-title">Настройте псевдоним Metro</h3>

Это настраивает команду `metro` для вашего проекта, позволяя использовать команды Metro CLI без полного синтаксиса `dart run`.

``` bash
cd my_app
nylo init
```

После этого перезапустите терминал или выполните команду `source`, которую выводит `nylo init`.

</div>
</div>

<div class="ny-doc-panel">
<div class="ny-doc-panel-head">
<img src="https://nylo.dev/images/nylo_logo.png" alt="" class="ny-mark h-[16px]">
<span>Что вы получите</span>
</div>
<div class="ny-doc-panel-body">
<div class="ny-doc-panel-grid">
<div class="ny-doc-panel-item">Предварительно настроенные маршрутизация и навигация</div>
<div class="ny-doc-panel-item">Шаблон API-сервиса</div>
<div class="ny-doc-panel-item">Настройка тем и локализации</div>
<div class="ny-doc-panel-item">Metro CLI для генерации кода</div>
</div>
</div>
</div>


<div id="running-the-project"></div>

## Запуск проекта

Проекты Nylo запускаются как любое стандартное Flutter-приложение.

<div class="ny-doc-tabs" x-data="{ tab: '\u0422\u0435\u0440\u043c\u0438\u043d\u0430\u043b' }">
<div class="ny-doc-tabbar" role="tablist">
<button type="button" role="tab" class="ny-doc-tab" @click="tab = '\u0422\u0435\u0440\u043c\u0438\u043d\u0430\u043b'" :class="tab === '\u0422\u0435\u0440\u043c\u0438\u043d\u0430\u043b' ? 'is-active' : ''" :aria-selected="tab === '\u0422\u0435\u0440\u043c\u0438\u043d\u0430\u043b'">Терминал</button>
<button type="button" role="tab" class="ny-doc-tab" @click="tab = 'Android Studio'" :class="tab === 'Android Studio' ? 'is-active' : ''" :aria-selected="tab === 'Android Studio'">Android Studio</button>
<button type="button" role="tab" class="ny-doc-tab" @click="tab = 'VS Code'" :class="tab === 'VS Code' ? 'is-active' : ''" :aria-selected="tab === 'VS Code'">VS Code</button>
</div>

<div class="ny-doc-tabpanel" role="tabpanel" x-show="tab === '\u0422\u0435\u0440\u043c\u0438\u043d\u0430\u043b'" x-cloak>

``` bash
flutter run
```

Если сборка прошла успешно, приложение отобразит стартовый экран Nylo по умолчанию.

</div>

<div class="ny-doc-tabpanel" role="tabpanel" x-show="tab === 'Android Studio'" x-cloak>

Откройте папку проекта, выберите устройство в селекторе цели и нажмите **Run**.

<a href="https://docs.flutter.dev/tools/android-studio#running-and-debugging" target="_BLANK">Документация Flutter: запуск и отладка ↗</a>

</div>

<div class="ny-doc-tabpanel" role="tabpanel" x-show="tab === 'VS Code'" x-cloak>

Откройте папку проекта и выполните **Debug: Start Without Debugging** из палитры команд.

<a href="https://docs.flutter.dev/tools/vs-code#run-app-without-breakpoints" target="_BLANK">Документация Flutter: запуск без точек останова ↗</a>

</div>

</div>


<div id="metro-cli"></div>

## Metro CLI

Metro генерирует файлы проекта. Запустите его без аргументов, чтобы увидеть меню, или вызовите команду напрямую.

``` plaintext
$ metro

Metro - Nylo's Companion to Build Flutter apps by Anthony Gordon

Usage:
    command [options] [arguments]

Options
    -h

All commands:

[Widget Commands]
  make:page
  make:stateful_widget
  make:stateless_widget
  make:state_managed_widget
  make:navigation_hub
  make:journey_widget
  make:bottom_sheet_modal
  make:button
  make:form

[Helper Commands]
  make:model
  make:provider
  make:api_service
  make:controller
  make:event
  make:route_guard
  make:config
  make:interceptor
  make:command
  make:env
```

### Справочник команд

Каждая команда принимает имя, например `metro make:page settings_page`

<div class="ny-doc-commands">
<div class="ny-doc-commands-head">Команды виджетов</div>
<div class="ny-doc-command">
<code>metro make:page</code>
<span>Создать новую страницу</span>
</div>
<div class="ny-doc-command">
<code>metro make:stateful_widget</code>
<span>Создать stateful-виджет</span>
</div>
<div class="ny-doc-command">
<code>metro make:stateless_widget</code>
<span>Создать stateless-виджет</span>
</div>
<div class="ny-doc-command">
<code>metro make:state_managed_widget</code>
<span>Создать виджет с управлением состоянием</span>
</div>
<div class="ny-doc-command">
<code>metro make:navigation_hub</code>
<span>Создать навигационный хаб (нижняя навигация)</span>
</div>
<div class="ny-doc-command">
<code>metro make:journey_widget</code>
<span>Создать journey-виджет для навигационного хаба</span>
</div>
<div class="ny-doc-command">
<code>metro make:bottom_sheet_modal</code>
<span>Создать модальное нижнее окно</span>
</div>
<div class="ny-doc-command">
<code>metro make:button</code>
<span>Создать пользовательский виджет кнопки</span>
</div>
<div class="ny-doc-command">
<code>metro make:form</code>
<span>Создать форму с валидацией</span>
</div>
</div>

<div class="ny-doc-commands">
<div class="ny-doc-commands-head">Вспомогательные команды</div>
<div class="ny-doc-command">
<code>metro make:model</code>
<span>Создать класс модели</span>
</div>
<div class="ny-doc-command">
<code>metro make:provider</code>
<span>Создать провайдер</span>
</div>
<div class="ny-doc-command">
<code>metro make:api_service</code>
<span>Создать API-сервис</span>
</div>
<div class="ny-doc-command">
<code>metro make:controller</code>
<span>Создать контроллер</span>
</div>
<div class="ny-doc-command">
<code>metro make:event</code>
<span>Создать событие</span>
</div>
<div class="ny-doc-command">
<code>metro make:route_guard</code>
<span>Создать защитник маршрута</span>
</div>
<div class="ny-doc-command">
<code>metro make:config</code>
<span>Создать файл конфигурации</span>
</div>
<div class="ny-doc-command">
<code>metro make:interceptor</code>
<span>Создать сетевой перехватчик</span>
</div>
<div class="ny-doc-command">
<code>metro make:command</code>
<span>Создать пользовательскую команду Metro</span>
</div>
<div class="ny-doc-command">
<code>metro make:env</code>
<span>Сгенерировать конфигурацию окружения из .env</span>
</div>
</div>

### Примеры использования

``` bash
# Create a new page
metro make:page settings_page

# Create a model
metro make:model User

# Create an API service
metro make:api_service user_api_service
```


<div id="nylo-cli"></div>

## Nylo CLI

<!-- uncertain: no established ru rendering yet for the x-doc-strip label "Requires"; used "Требуется" -->
<div class="ny-doc-strip">
<span class="ny-doc-strip-label">Требуется</span>
<span class="ny-doc-strip-item">nylo_installer 1.8.0+</span>
<span class="ny-doc-strip-dot"></span>
<a href="#nylo-self-update">Обновить CLI →</a>
</div>

Команда `nylo` из шага 1 умеет не только создавать проекты. Запускайте её из директории вашего проекта, чтобы очищать сборки, обновлять iOS pods, запускать тесты и проверять переводы.

<div class="ny-doc-commands">
<div class="ny-doc-commands-head">Команды проекта</div>
<div class="ny-doc-command">
<code>nylo new</code>
<span>Создать новый проект</span>
</div>
<div class="ny-doc-command">
<code>nylo init</code>
<span>Настроить псевдоним metro в вашей оболочке</span>
</div>
<div class="ny-doc-command">
<code>nylo clean</code>
<span>Выполнить flutter clean и flutter pub get</span>
</div>
<div class="ny-doc-command">
<code>nylo ios:pod-refresh</code>
<span>Переустановить iOS pods</span>
</div>
<div class="ny-doc-command">
<code>nylo metro</code>
<span>Выполнить команду Metro без псевдонима</span>
</div>
</div>

<div class="ny-doc-commands">
<div class="ny-doc-commands-head">Тестирование и переводы</div>
<div class="ny-doc-command">
<code>nylo test</code>
<span>Отформатировать и запустить тесты</span>
</div>
<div class="ny-doc-command">
<code>nylo locale:find-untranslated</code>
<span>Найти текст, не обёрнутый в .tr()</span>
</div>
<div class="ny-doc-command">
<code>nylo locale:check-missing-keys</code>
<span>Найти ключи, отсутствующие в файлах языков</span>
</div>
</div>

<div class="ny-doc-commands">
<div class="ny-doc-commands-head">Сам CLI</div>
<div class="ny-doc-command">
<code>nylo self-update</code>
<span>Обновить nylo до последней версии</span>
</div>
<div class="ny-doc-command">
<code>nylo --version</code>
<span>Показать установленную версию</span>
</div>
</div>

Команды, принимающие опции, показывают их список через `-h`, например `nylo test -h`. Тестирование описано в разделе [Запуск тестов](/docs/7.x/testing#running-tests), а команды `locale:` — в разделе [Аудит переводов](/docs/7.x/localization#auditing-translations).

<div id="nylo-clean"></div>

### Очистка проекта

Команда `nylo clean` выполняет `flutter clean`, а затем `flutter pub get`. Добавьте флаг платформы, если обычной очистки недостаточно:

``` bash
# flutter clean, затем flutter pub get
nylo clean

# Также удалить ios/Pods, ios/.symlinks и ios/Podfile.lock, затем выполнить pod install --repo-update
nylo clean --ios

# Также выполнить gradlew clean в android/
nylo clean --android

# Оба варианта выше
nylo clean --all
```

Если в проекте нет папки `ios/` или `android/`, эта платформа пропускается с предупреждением. `pod install` запускается только на macOS.

<div id="nylo-ios-pod-refresh"></div>

### Обновление iOS pods

Когда CocoaPods выходит из синхронизации, команда `nylo ios:pod-refresh` удаляет `ios/Pods`, `ios/.symlinks` и `ios/Podfile.lock`, а затем выполняет `pod install --repo-update` в папке `ios/`:

``` bash
nylo ios:pod-refresh
```

Запускайте её из корня проекта на macOS. В отличие от `nylo clean --ios`, она не выполняет `flutter clean` или `flutter pub get`.

<div id="nylo-metro"></div>

### Запуск Metro без псевдонима

Команда `nylo metro` передаёт всё, что указано после неё, в Metro (`dart run nylo_framework:main`). Используйте её, если вы ещё не выполнили `nylo init`, либо на Windows, где `nylo init` не может добавить псевдоним `metro` за вас:

``` bash
nylo metro make:page settings_page
nylo metro make:model User
```

<div id="nylo-self-update"></div>

### Обновление CLI

``` bash
nylo self-update
```

Это проверяет pub.dev и переустанавливает `nylo_installer`, если доступна более новая версия. После завершения любой команды `nylo` также сообщает, если вышло обновление. Он не выводит это сообщение, если вывод идёт не в терминал, поэтому уведомление никогда не попадает в логи CI или в перенаправленный вывод.

Чтобы узнать, какая версия у вас установлена:

``` bash
nylo --version
```
