Flutter: InteractiveViewer มาทำให้ Widget ของเรา Pan, Zoom กันเถอะ

Published on

Authored by Pete. Pittawat Taveekitworachai.


หลายครั้งที่เรามี Content ที่มีขนาดใหญ่กว่าขนาดของหน้าจอหรือขนาดของ Parent Widget แต่เราก็ไม่อยากให้ผู้ใช้ของเราต้องสูญเสียข้อมูลที่อาจจะต้องการไป เช่น เรามีตารางขนาดใหญ่มาก จนตัวอักษรเล็กไปหมด แน่นอนว่าเราต้อง Zoom เพื่อให้เห็นได้ชัดเจนยิ่งขึ้น แต่นั่นก็จะทำให้ข้อมูลส่วนที่อยู่นอกหน้าจอหายไปด้วย จะดีกว่ามั้ยหากเราสามารถทำให้ผู้ใช้ของเรา Pan เลื่อนดูข้อมูลส่วนที่อยู่นอกหน้าจอได้ นั่นคือหน้าที่ของ InteractiveViewer นั่นเอง


InteractiveViewer

InteractiveViewer เป็น Widget ที่จะอนุญาตให้ผู้ใช้สามารถโต้ตอบกับ Widget ของเราได้ ไม่ว่าจะเป็นการ Pan, Zoom หรืออื่น ๆ แล้วแต่เราจะ Implement สำหรับวิธีการใช้ก็ง่ายดายมาก เพียงแค่เอา InteractiveViewer ไป Wrap Widget ที่เราต้องการให้สามารถ Interact ได้เท่านั้นเอง

    // ...
    InteractiveViewer(
    	child: WigetWeWantToZoom(),
    ),
    // ...

ข้อควรระวังหนึ่งเมื่อใช้ InteractiveViewer ก็คือ Widget ตัวนี้นั้นอาจจะ Draw นอก Area ปกติของ Child Widget ได้ ซึ่งอาจทำให้ Child Widget ที่ต้องมีการ Interact ไม่ได้รับ User Input เช่น การ Touch เมื่อกดนอก Input Area ซึ่ง InteractiveViewer วาดเกินไว้ โดยเราสามารถแก้ไขปัญหานี้ได้ด้วยการ Wrap InteractiveViewer ไว้ใน ClipRect อีกชั้นนั่นเอง


ศึกษาเพิ่มเติมเกี่ยวกับ InteractiveViwer ได้ที่ API Document


📚 Hope you enjoy reading! 📚