# 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="/th/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 แบบ global</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>

คำสั่งนี้จะ clone เทมเพลต Nylo ตั้งค่าโปรเจกต์ด้วยชื่อแอปของคุณ และติดตั้ง dependencies ทั้งหมดโดยอัตโนมัติ

``` 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 alias</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 service</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: '\u0e40\u0e17\u0e2d\u0e23\u0e4c\u0e21\u0e34\u0e19\u0e31\u0e25' }">
<div class="ny-doc-tabbar" role="tablist">
<button type="button" role="tab" class="ny-doc-tab" @click="tab = '\u0e40\u0e17\u0e2d\u0e23\u0e4c\u0e21\u0e34\u0e19\u0e31\u0e25'" :class="tab === '\u0e40\u0e17\u0e2d\u0e23\u0e4c\u0e21\u0e34\u0e19\u0e31\u0e25' ? 'is-active' : ''" :aria-selected="tab === '\u0e40\u0e17\u0e2d\u0e23\u0e4c\u0e21\u0e34\u0e19\u0e31\u0e25'">เทอร์มินัล</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 === '\u0e40\u0e17\u0e2d\u0e23\u0e4c\u0e21\u0e34\u0e19\u0e31\u0e25'" x-cloak>

``` bash
flutter run
```

หากการ build สำเร็จ แอปจะแสดงหน้าจอเริ่มต้นของ 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** จาก command palette

<a href="https://docs.flutter.dev/tools/vs-code#run-app-without-breakpoints" target="_BLANK">เอกสาร Flutter: รันโดยไม่มี breakpoint ↗</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">คำสั่ง Widget</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 widget</span>
</div>
<div class="ny-doc-command">
<code>metro make:stateless_widget</code>
<span>สร้าง stateless widget</span>
</div>
<div class="ny-doc-command">
<code>metro make:state_managed_widget</code>
<span>สร้าง state-managed widget</span>
</div>
<div class="ny-doc-command">
<code>metro make:navigation_hub</code>
<span>สร้าง navigation hub (แถบนำทางด้านล่าง)</span>
</div>
<div class="ny-doc-command">
<code>metro make:journey_widget</code>
<span>สร้า journey widget สำหรับ navigation hub</span>
</div>
<div class="ny-doc-command">
<code>metro make:bottom_sheet_modal</code>
<span>สร้าง bottom sheet modal</span>
</div>
<div class="ny-doc-command">
<code>metro make:button</code>
<span>สร้าง widget ปุ่มที่กำหนดเอง</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">คำสั่ง Helper</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>สร้าง provider</span>
</div>
<div class="ny-doc-command">
<code>metro make:api_service</code>
<span>สร้าง API service</span>
</div>
<div class="ny-doc-command">
<code>metro make:controller</code>
<span>สร้าง controller</span>
</div>
<div class="ny-doc-command">
<code>metro make:event</code>
<span>สร้าง event</span>
</div>
<div class="ny-doc-command">
<code>metro make:route_guard</code>
<span>สร้าง route guard</span>
</div>
<div class="ny-doc-command">
<code>metro make:config</code>
<span>สร้างไฟล์ config</span>
</div>
<div class="ny-doc-command">
<code>metro make:interceptor</code>
<span>สร้าง network interceptor</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>สร้าง environment config จาก .env</span>
</div>
</div>

### ตัวอย่างการใช้งาน

``` bash
# สร้างหน้าใหม่
metro make:page settings_page

# สร้างโมเดล
metro make:model User

# สร้าง API service
metro make:api_service user_api_service
```


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

## Nylo CLI

<!-- uncertain: label "Requires" has no established translation in this locale file's existing x-doc-strip usage -->
<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 ทำได้มากกว่าแค่สร้างโปรเจกต์ เรียกใช้จากไดเรกทอรีโปรเจกต์ของคุณเพื่อล้าง build รีเฟรช 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>ตั้งค่า alias metro ใน shell ของคุณ</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 โดยไม่ใช้ alias</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` เพิ่ม flag แพลตฟอร์มเมื่อการล้างแบบปกติไม่เพียงพอ:

``` 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
```

เรียกใช้จาก root ของโปรเจกต์บน macOS ต่างจาก `nylo clean --ios` คำสั่งนี้จะไม่รัน `flutter clean` หรือ `flutter pub get`

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

### การรัน Metro โดยไม่ใช้ alias

`nylo metro` จะส่งทุกอย่างที่ตามหลังไปยัง Metro (`dart run nylo_framework:main`) ใช้คำสั่งนี้ก่อนที่คุณจะรัน `nylo init` หรือบน Windows ที่ซึ่ง `nylo init` ไม่สามารถเพิ่ม alias `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` จะบอกคุณด้วยเมื่อมีอัปเดตออกมา มันจะเงียบเมื่อ output ไม่ได้ส่งไปยังเทอร์มินัล เพื่อไม่ให้ข้อความแจ้งเตือนไปปรากฏใน CI log หรือรายงานที่ถูก pipe

หากต้องการดูว่าคุณติดตั้งเวอร์ชันใดอยู่:

``` bash
nylo --version
```
