Project & Tooling
pubspec.yaml: manifest ของโปรเจกต์
หัวข้อที่มีชื่อว่า “pubspec.yaml: manifest ของโปรเจกต์”ทุกโปรเจกต์ Flutter ถูกอธิบายด้วย pubspec.yaml — dependency, dependency ที่ใช้เฉพาะตอน dev และ asset ที่ bundle เข้าไปในแอป
name: my_appenvironment: 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 CLI
หัวข้อที่มีชื่อว่า “flutter CLI”คำสั่ง flutter คือประตูสู่ทุกอย่าง:
flutter create my_app # scaffold a new projectflutter pub get # resolve and download dependenciesflutter run # run on a connected device/emulatorflutter run --release # run in release modeflutter build apk # produce a release buildflutter doctor # diagnose your local toolchainflutter analyze # static analysis / lintsflutter doctor คือสิ่งแรกที่ควรรันเมื่ออะไรผิดปกติ — ตรวจ SDK, device toolchain และ IDE plugin แล้วบอกคุณตรง ๆ ว่าขาดอะไร
DevTools
หัวข้อที่มีชื่อว่า “DevTools”DevTools คือชุดเครื่องมือบน browser สำหรับ inspect แอปที่กำลังรัน: widget inspector (แตะ widget เห็น tree และ constraints ของตัวเอง), performance/timeline view (หา jank), memory view และ network view นี่คือวิธีที่คุณจะ เห็น tree และ pipeline ที่โมดูลก่อน ๆ อธิบายไว้
Hot reload vs hot restart
หัวข้อที่มีชื่อว่า “Hot reload vs hot restart”คำสั่ง 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