ข้ามไปยังเนื้อหา

Flutter Setup & Toolchain

หมายเหตุ Playground: บทเรียนนี้เป็น setup และ toolchain — ไม่มี snippet ที่รันในบราวเซอร์ได้อย่างมีความหมาย ทำตามขั้นตอนใน terminal ของคุณ

การ setup Flutter ใกล้เคียงกับการติดตั้ง Go หรือ Rust toolchain มากกว่า npm install คุณดาวน์โหลด SDK ครั้งเดียว เพิ่มใน PATH แล้ว flutter CLI จัดการทุกอย่างเอง — dependency management, device emulation, builds, และ hot reload

เข้าไปที่ flutter.dev/docs/get-started/install และทำตาม guide สำหรับ OS ของคุณ (macOS, Windows, หรือ Linux)

macOS shortcut (Homebrew):

Terminal window
brew install --cask flutter

หลังติดตั้งแล้ว รัน doctor เพื่อตรวจสอบ environment:

Terminal window
flutter doctor

flutter doctor เหมือน npx create-react-app --check ของ Flutter — scan หา dependency ที่ขาด (Xcode, Android Studio, connected devices) และบอกว่าต้องแก้อะไร

ทุกอย่างในคอร์สนี้เขียนตาม Flutter 3.47 (stable ปัจจุบัน) และเทียบกับ React 19 ฝั่ง React stable channel ของ Flutter ออกประมาณไตรมาสละครั้ง จึงมีข้อกำหนดของ platform สองสามข้อที่ควรเช็คก่อนเริ่ม:

เป้าหมายข้อกำหนดบน Flutter 3.47
iOSiOS 15 ขึ้นไป (ขยับจาก 13)
macOSmacOS 12 ขึ้นไป (ขยับจาก 10.15)
Xcodeรองรับ Xcode 27
RendererImpeller เป็นค่าเริ่มต้นบน iOS, Android, macOS, Windows และ Linux
iOS pluginSwift Package Manager ส่วน CocoaPods อยู่ในสถานะ maintenance

Impeller เข้ามาแทน Skia เพื่อแก้ปัญหา “animation แรกกระตุก” โดยตรง เพราะ shader ถูก compile ตอน build แทนที่จะไปค้นพบเอาตอน runtime ถ้าคุณเคยอ่านบทความ Flutter เก่า ๆ ที่บ่นเรื่อง jank ในเฟรมแรกของ animation นั่นคือปัญหาที่ Impeller แก้ และบน 3.47 มันเปิดเป็นค่าเริ่มต้นทุก platform แล้ว

เรื่อง Swift Package Manager จะมีผลครั้งแรกตอนคุณเพิ่ม plugin ที่มี native code ฝั่ง iOS plugin ยอดนิยมส่วนใหญ่ migrate ไปแล้ว ถ้าเจอตัวที่ยังไม่ migrate คุณจะเห็น CocoaPods ถูกใช้แทน ซึ่งยังทำงานได้อยู่ตอนนี้ แต่ให้มอง plugin ที่ยังไม่ migrate เป็นสัญญาณเรื่องการดูแลรักษา แบบเดียวกับที่คุณมอง npm package ที่ publish ครั้งสุดท้ายเมื่อสามปีก่อน

npm / Vite / CRAflutter CLIวัตถุประสงค์
npm create vite@latest my-appflutter create my_appScaffold project ใหม่
npm installflutter pub getติดตั้ง dependencies
npm run devflutter runStart dev server + hot reload
npm run buildflutter build apk / flutter build webProduction build
npm install packageflutter pub add packageเพิ่ม dependency
npm testflutter testรัน tests
npx eslint .flutter analyzeLint / static analysis
Terminal window
flutter create my_app
cd my_app
flutter run

flutter create generate project คล้ายกับ create-react-app: entry point, sample widget, และ platform-specific boilerplate ทั้งหมด (iOS Xcode project, Android Gradle files, web index.html)

flowchart TB
  root["my_app/"]
  lib["lib/"]
  mainDart["main.dart — entry point (≈ src/main.tsx)"]
  test["test/"]
  widgetTest["widget_test.dart — tests (≈ src/__tests__/)"]
  pubspec["pubspec.yaml — dependencies (≈ package.json)"]
  android["android/ — Android native shell"]
  ios["ios/ — iOS native shell"]
  web["web/ — Web shell"]
  root --> lib --> mainDart
  root --> test --> widgetTest
  root --> pubspec
  root --> android
  root --> ios
  root --> web
Flutter project structure vs React

Dart code ทั้งหมดอยู่ใน lib/ คุณแทบไม่ต้องยุ่งกับ android/ หรือ ios/ เว้นแต่จะต้องใช้ native code

pubspec.yaml
name: my_app
dependencies:
flutter:
sdk: flutter
dio: ^5.4.0 # HTTP client (≈ axios)
go_router: ^18.0.0 # routing (≈ react-router-dom)
dev_dependencies:
flutter_test:
sdk: flutter
flutter_lints: ^6.0.0

หลังแก้ pubspec.yaml รัน flutter pub get (≈ npm install) เพื่อ fetch packages จาก pub.dev — npm registry ของ Dart

Terminal window
flutter pub add dio

คำสั่งนี้แก้ pubspec.yaml และรัน pub get ในขั้นตอนเดียว — เทียบเท่า npm install dio

VS Code (แนะนำสำหรับ React developer):

  1. ติดตั้ง extension Flutter (รวม Dart language support)
  2. เปิด command palette → Flutter: Select Device เพื่อเลือก simulator/emulator
  3. กด F5 หรือรัน Flutter: Run เพื่อเริ่มพร้อม hot reload

Android Studio / IntelliJ: ติดตั้ง Flutter และ Dart plugins เหมาะสำหรับงาน Android เป็นหลัก

ทั้งคู่ทำงานเหมือนกัน: แก้ source file, save, แล้ว app ที่รันอยู่จะ update ภายในไม่ถึงวินาทีโดยไม่ต้อง reset state ใน Flutter:

  • Hot Reload (r ใน terminal, หรือ Ctrl+S ใน VS Code ที่มี extension) — inject code ที่อัปเดตแล้ว, preserve widget state
  • Hot Restart (R) — restart ทั้งหมด, reset state เทียบเท่า Ctrl+C + npm run dev
Terminal window
# list available devices
flutter devices
# run on a specific device
flutter run -d "iPhone 16"
flutter run -d chrome
flutter run -d macos
Flutter equivalent ของ `npm install` คืออะไร?
Dart application code อยู่ใน folder ใดของ Flutter project?
คำสั่งใดที่เพิ่ม package ใหม่ใน Flutter project และอัปเดต pubspec.yaml?
Hot Reload ของ Flutter preserve widget state ส่วน Hot Restart ทำอะไร?
Impeller ซึ่งเป็น renderer เริ่มต้นบน Flutter 3.47 แก้ปัญหาอะไร?