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

Project & Tooling

ทุกโปรเจกต์ Flutter ถูกอธิบายด้วย pubspec.yaml — dependency, dependency ที่ใช้เฉพาะตอน dev และ asset ที่ bundle เข้าไปในแอป

name: my_app
environment:
sdk: ^3.5.0
dependencies:
flutter:
sdk: flutter
go_router: ^14.0.0 # runtime dependency
dev_dependencies:
flutter_test:
sdk: flutter
flutter_lints: ^4.0.0 # only used during development/tests
flutter:
uses-material-design: true
assets:
- assets/images/ # a whole folder
- assets/config.json # a single file

การแยกนี้สำคัญ: dependencies ไปกับแอป ส่วน dev_dependencies (test framework, linter, code generator) ไม่ไป ส่วน asset ที่ list ไว้ตรงนี้คือตัวเดียวที่ถูก bundle — การลืมใส่ entry คือสาเหตุยอดฮิตของ “asset not found”

คำสั่ง flutter คือประตูสู่ทุกอย่าง:

Terminal window
flutter create my_app # scaffold a new project
flutter pub get # resolve and download dependencies
flutter run # run on a connected device/emulator
flutter run --release # run in release mode
flutter build apk # produce a release build
flutter doctor # diagnose your local toolchain
flutter analyze # static analysis / lints

flutter doctor คือสิ่งแรกที่ควรรันเมื่ออะไรผิดปกติ — ตรวจ SDK, device toolchain และ IDE plugin แล้วบอกคุณตรง ๆ ว่าขาดอะไร

DevTools คือชุดเครื่องมือบน browser สำหรับ inspect แอปที่กำลังรัน: widget inspector (แตะ widget เห็น tree และ constraints ของตัวเอง), performance/timeline view (หา jank), memory view และ network view นี่คือวิธีที่คุณจะ เห็น tree และ pipeline ที่โมดูลก่อน ๆ อธิบายไว้

คำสั่ง refresh สองตัวนี้ไม่เหมือนกัน และรู้ความต่างช่วยประหยัดความสับสนได้จริง:

  • Hot reload (r) inject source ที่เปลี่ยนเข้าไปในแอปที่ กำลังรัน แล้ว rebuild widget tree — State ถูกเก็บไว้ เร็วระดับต่ำกว่าวินาที และเป็นเหตุผลที่ทำให้การ dev Flutter รู้สึกเร็ว
  • Hot restart (R) ทิ้ง state ของแอปแล้วเริ่มใหม่จาก main() — ช้ากว่า แต่เริ่มจากศูนย์สะอาด ๆ

hot reload มีข้อจำกัด: re-run build ให้ แต่ ไม่ re-run initState หรือ main() ที่เปลี่ยน และ apply บางการเปลี่ยนแปลงไม่ได้ (การ eval const ใหม่, การเปลี่ยน shape ของ enum/class, global variable initializer) เมื่อการเปลี่ยนแปลงดูเหมือนไม่ติด คำตอบมักคือ hot restart

ความต่างระหว่าง `dependencies` กับ `dev_dependencies` ใน pubspec.yaml คืออะไร?
hot reload เก็บอะไรไว้ที่ hot restart ไม่เก็บ?
ทำไมการเปลี่ยน code อาจไม่ปรากฏหลัง hot reload?
คำสั่งแรกที่ควรรันเมื่อ local toolchain ดูเหมือนพัง?