Flutter: How to custom widgets (DIY)
ในการ implement ถ้าเราจะเขียน code ทุกอย่างโดยไม่จัดการ code ที่ซ้ำกันเลย แน่นอน code เราจะเยอะและยุ่งเหยิงมาก ฉะนั้น widgets ไหนที่มี property เยอะๆ และต้องเรียกใช้บ่อยๆ ลองมาใช้วิธีการ extract กันดีกว่า
ในตัวอย่างนี้จขออนุญาตใช้ TextFormField() ซึ่งเป็น widget มาตรฐานในการรับค่า input ของ Flutter มาทำการแปลงเป็น DIY widget ของเราเองไว้เรียกใช้ดูนะคับ
จากตัวอย่าง TextFormField() 2 ชุดด้านล่าง มีส่วนที่ต่างกันเพียง 5 จุดเท่านั้น ฉะนั้นตามหลักการแล้ว เราจะไม่เขียน code ที่ซ้ำกัน
เราสามารถ handle ได้ 2 วิธีคือ
- Extract to method (ทำเป็น Function)
- Extract to widget (ทำเป็น Class)
แต่จากตัวอย่างนี้เราจะมาทดลอง Extrat to widget กันนะคับ เพราะแบบเป็น method คิดว่าทำได้ง่ายกว่า
ให้ทำการ drag mouse ให้ครอบ widget ที่เราต้องการจะ extract และทำการคลิกที่ดวงไฟสีเหลือง และเลือก Extract Widget.
จากนั้นให้เราตั้งชื่อ class ตามที่เราต้องการ จากตัวอย่างเราจะตั้งว่า CurrencyFormField
จากนั้น vscode จะสร้าง class ตามชื่อที่เราได้ตั้งขึ้นมาให้เราตามนี้
ต่อไปเราจะมาทำการ customize เพื่อให้ class นี้สามารถมา reuse ใช้ได้กับ TextFormField ทั้ง 2 แบบ
เราสามารถเพิ่มคีย์เวิร์ด “@required” ที่ constructor เพื่อบังคับให้ dev ที่นำ widget นี้ไปใช้จะต้องไม่ลืมใส่ค่า property ต่างๆที่ต้องการเข้ามาด้วย ถ้าตัวไหนเป็นเพียง optional ก็ไม่ต้องใส่
เมื่อใช้งานจริงจะเห็นว่าสามารถไปใช้งานได้โดยกรอกเฉพาะ preperty ที่เราต้องการจริงๆเท่านั้น
PS: datatype สามารถเป็นอะไรก็ได้นะคับ แม้กระทั่งเป็น function,
ภาพด้านล่างคือการพาส validator: ออกมา เพื่อให้เรียกใช้งานได้จาก DIY widget.
แล้วพบกันใหม่คับ
GRASSROOT ENGINEER