![blog flutter version manager blog flutter version manager](https://scbtechx.io/wp-content/uploads/2022/08/blog_flutter_version_manager-600x297.png)
เมื่อไม่นานมานี้ผมได้มีโอกาสสร้าง MVP ตัวหนึ่งด้วย Flutter และด้วยความที่ส่วนตัวเป็นคนชอบเข้าไปดู ค้นหาโปรเจคทั้งหลายที่มีคนเคยเขียนไว้ใน GitHub เพื่อดูว่า Open Source โปรเจคต่าง ๆ เขามีวิธีการเขียน Widget ที่สามารถนำกลับมาใช้งานใหม่ได้อย่างไรกันบ้าง การจัดการ codebase อย่างไร หรือแอบจิ๊กเอา GitHub Workflow ไฟล์มาปรับในโปรเจคบ้างก็มี แต่เอาละเข้าเนื้อหากันเลย
ตอนนั้นคือผม clone โปรเจคลงมาแล้วลองนำมาเล่นบนเครื่องตัวเองทำให้เจอปัญหาในหลายเรื่องไม่ว่าจะเป็น โปรเจคเก่าไปแล้ว Flutter SDK หรือ dart ในเครื่องมีเวอร์ชันที่ใหม่ไปทำให้การนำมารันทำได้ค่อนข้างยาก รวมถึงการอัพเกรดและดาวน์เกรดเช่นกัน
การอัพเดทและดาวน์เกรดก็มีปัญหาเช่นกัน ถ้าใครเคยลงด้วย Homebrew การอัพเกรดอาจทำให้ Environment path ผิดทำให้ต้องมาเซ็ทใหม่กันอีกรอบเพราะเลขเวอร์ชันเปลี่ยนไป
แล้ว flutter upgrade | downgrade ใช้ไม่ได้เหรอ?
ใช้ได้เช่นกับครับ ถ้าเราสามารถใช้ได้อย่างไม่มีปัญหา แต่ผมลองใช้แล้วติดปัญหาตรงที่ถ้าเกิดเรา downgrade flutter จะเวิร์คกับเวอร์ชันที่อยู่ใน Flutter build release channel เท่านั้น ถ้าต่ำหรือเก่ากว่าหรือระบุเป็นเลขเวอร์ชันไปเลยก็จะไม่ได้ละ
![blog flutter version manager1 1 blog flutter version manager1 1](https://scbtechx.io/wp-content/uploads/2022/12/blog_flutter_version_manager1-1-600x158.png)
fvm คืออะไร
หากใครเคยใช้ nvm, rbenv, jenv สิ่งนี้คือสิ่งเดียวกันเลยครับ มันจะช่วยให้มี Flutter หลายเวอร์ชันได้ในเครื่องเดียว รวมถึงการจัดการ การสลับไปมาระหว่างเวอร์ชันได้อย่างไร้รอยต่อ (หากใครไม่เคยใช้ nvm สามารถอ่านต่อได้ที่บล็อกนี้ครับ) เพื่อไม่ให้เสียเวลาเรามาดูวิธีการใช้งานดีกว่าครับ
ติดตั้ง fvm
ขั้นแรกก่อนที่จะใช้งานเราจำเป็นต้องติดตั้ง fvm (ต้องมี Homebrew) ก่อนครับ
![blog flutter version manager2 blog flutter version manager2](https://scbtechx.io/wp-content/uploads/2022/12/blog_flutter_version_manager2-600x64.png)
เลือกเวอร์ชันของ SDK
หลังจากติดตั้งเสร็จเรียบร้อยแล้ว เรามาเลือกเวอร์ชันของ SDK ที่ต้องการจะติดตั้งโดยการการใช้คำสั่ง fvm releases
![blog flutter version manager3 blog flutter version manager3](https://scbtechx.io/wp-content/uploads/2022/12/blog_flutter_version_manager3-600x579.png)
ผมเลือกที่จะติดตั้ง SDK เวอร์ชัน 3.0.3 (stable) และ 2.13.0–0.1.pre(dev) จะต้องพิมพ์คำสั่ง fvm use <version>
ติดตั้ง Flutter SDK
ในการติดตั้ง Flutter SDK จะใช้คำสั่ง flutter install <version>
![blog flutter version manager4 blog flutter version manager4](https://scbtechx.io/wp-content/uploads/2022/12/blog_flutter_version_manager4-600x78.png)
เรียกดูเวอร์ชันของ Flutter
เมื่อติดตั้งเสร็จสิ้น เราสามารถดูเวอร์ชันที่ติดตั้งด้วยการใช้คำสั่ง fvm list
![blog flutter version manager5 blog flutter version manager5](https://scbtechx.io/wp-content/uploads/2022/12/blog_flutter_version_manager5-600x83.png)
เลือก Global version สำหรับ Flutter SDK
ทำได้ด้วยการใช้คำสั่ง fvm global <version>
![blog flutter version manager6 blog flutter version manager6](https://scbtechx.io/wp-content/uploads/2022/12/blog_flutter_version_manager6-600x137.png)
สาเหตุที่จำเป็นต้องเซ็ทค่าไว้เพราะว่าถ้าเกิดเรารันคำสั่ง fvm flutter run และไม่เจอการตั้งค่าของโปรเจคในระดับ local แล้วละก็มันจะ fallback กลับมาที่ global version ครับ
สลับเวอร์ชันในระดับ local หรือระหว่างโปรเจค
สามารถทำได้โดยการใช้คำสั่ง fvm use <version>
![blog flutter version manager7 blog flutter version manager7](https://scbtechx.io/wp-content/uploads/2022/12/blog_flutter_version_manager7-600x185.png)
เท่านี้เราก็จะได้ Flutter เวอร์ชัน stable และ dev อยู่ในเครื่องเดียวกันเรียบร้อย ส่วนต่อไปก็เป็น
สร้าง alias สำหรับคนขี้เกียจพิมพ์
![blog flutter version manager8 blog flutter version manager8](https://scbtechx.io/wp-content/uploads/2022/12/blog_flutter_version_manager8-600x78.png)
เท่านี้เราก็สามารถใช้คำสั่ง f และ d โดยไม่ต้องพิมพ์เต็มว่า fvm flutter <command>หรือ fvm dart <command> เช่น
![blog flutter version manager9 blog flutter version manager9](https://scbtechx.io/wp-content/uploads/2022/12/blog_flutter_version_manager9-600x59.png)
ประโยชน์ที่ได้จากการเรียกเรียก Flutter, dart ผ่าน fvm คือ fvm
จะมองหาก SDK ในแต่ละลำดับดังนี้
- Project
- Ancestor directory
- Global (Set through FVM)
- Environment (Flutter version configured on
PATH
)