Day 09-สร้าง Animationให้ Bar Graph

BiteSizeStory
3 min readJan 9, 2021

--

สอนตัวเองเขียน app ด้วย Flutter ใน25วัน (Flutter Self-Learning Challenge in 25 Days)

วันที่9 จะเป็นการทดลองเขียนการสุ่มค่าตัวเลขขึ้นมา เพื่อนำมาเขียนเป็น Bar Graph และลองทำ animation ให้กราฟขยับเวลาเปลี่ยนค่า ซึ่งก็อ้างอิงวิธีการจาก

แต่ว่าจะไม่ได้ทำตามทั้งหมด เพราะอ่านแล้วยังรู้สึกงง เนื่องจากตอนหลังๆ อธิบายแล้วภาพและโค๊ดประกอบมันแปลกๆ แต่เดี๋ยวไว้มีโอกาสจะต้องมาลองแกะโค๊ดเพื่อศึกษาอย่างละเอียดอีกที เพราะบางอย่างอาจจะเป็นเพราะยังมือใหม่เลยยังไม่ค่อยเข้าใจเท่าที่ควร ก็เอาเป็นว่าเอาเท่าที่พอเข้าใจและทำตามได้ก่อนแล้วกัน

ตัวโครงสร้างโค๊ดหลักๆก็จะเป็นการ import ตัว package เพิ่มเติมเข้ามาคือ ‘dart:math’ และ ‘animation.dart’ ในโปรแกรม main ก็จะเป็นการ return ตัว MaterialApp widget โดย home: Property จะเรียกใช้ stateful widget class ชื่อ ChartPage() ดังนั้นเราก็จะต้องสร้าง stateful widget และ state class เพื่อให้รองรับสถานะของตัวกราฟและตัวเลขที่เปลี่ยนแปลงเมื่อผู้ใช้กดปุ่มรีเฟรช และใน state class นี้จะไปเรียก widget class ที่ชื่อ BarChartPainter เพื่อทำการวาดกราฟอีกที

ใน State class จะเป็นการสร้างตัวแปรชื่อ random เพื่อสุ่มค่าตัวเลขขึ้นมา ตัวแปร dataSet เพื่อเก็บค่าเริ่มต้น ตัวแปร animation เพื่อใช้ในการควบคุมการแสดง Animation และตัวแปร tween เพื่อทำการ interpolate ค่าในการเล่น Animation

และจะมี method ที่ชื่อ initState() สำหรับกำหนดสถานะเริ่มต้น โดยกำหนดค่าระยะเวลาในการเล่น Animation ประมาณ 300 มิลลิวินาที กำหนดค่า tween และค่า animation ให้เล่นแบบไปข้างหน้า

dispose() สำหรับคืนค่าทรัพยากรที่ใช้ในการเล่น Animation

และ changeData() สำหรับการ set ค่า state และสุ่มค่าตัวเลขให้อยู่ในช่วง 0 ถึง 100

จากนั้นในส่วน build method จะ return Scaffold widget โดยมีการเรียกใช้ widget class ที่ชื่อ CustomPaint() สำหรับในการสร้างภาพกราฟ โดยจะทำการเรียก widget class ที่ชื่อ BarChartPainterในการกำหนดขนาดรูปร่างและสีของกราฟ และมี Text widget สำหรับแสดงค่าตัวเลขที่สุ่มขึ้นมาด้วย

นอกจากนี้ก็จะมีการสร้างปุ่มสำหรับให้ผู้ใช้กดเพื่อรีเฟรชโดยการไปเรียก method changeData เพื่อเปลี่ยนค่าตัวเลขใหม่

ใน widget class ที่ชื่อ BarChartPainter ก็จะมีการกำหนดตัวแปร barWidth เพื่อกำหนดความกว้างของแท่งกราฟ และจะสร้าง method ชื่อ paint() สำหรับสร้างตัวกราฟด้วย Rect class ที่จะทำการสร้างรูปสี่เหลี่ยมจากการกำหนดขอบด้านซ้าย ขอบด้านบน และค่าความกว้างความสูง

เมื่อทำการรันโปรแกรม ก็จะทำการเริ่มด้วยการสร้างกราฟที่ค่าตัวเลข 50 จากนั้นเมื่อกดปุ่มรีเฟรช ก็จะทำการสุ่มค่าและสร้างรูปกราฟตามความสูงของค่าที่สุ่มได้

เราสามารถลองเล่นกับการเปลี่ยนขนาดความกว้างของกราฟ สีของกราฟได้จากค่าตัวแปร Colors.blue[400] ให้เป็นค่าอื่น และตัวแปร barWidth =10 ให้เป็นค่าอื่น

สุดท้ายนี้ต้องบอกว่าไม่ได้เข้าใจในส่วนของโค๊ดทั้งหมดแต่ก็พอจะทำให้สามารถเรียนรู้เพื่อดัดแปลงบางอย่างและนำไปใช้ได้บ้าง

ติดตามบทความ สอนตัวเองเขียน app ด้วย Flutter ใน25วัน (Flutter Self-Learning Challenge in 25 Days) ทั้งหมดได้จากลิงค์ด้านล่าง

Day25-สร้าง app สำหรับอัพเดทยอดผู้ติดเชื้อโควิด19 ทั่วโลก

Day24-สร้าง app สำหรับอ่านข่าวด้วย NewsAPI ตอนที่3

Day23-สร้าง app สำหรับอ่านข่าวด้วย NewsAPI ตอนที่2

Day22-สร้าง app สำหรับอ่านข่าวด้วย NewsAPI ตอนที่1

Day21-ใช้ WebView ในการแสดงผลไฟล์ html5 ด้วย webview_flutter_plus package

Day20-ใช้ GridView และการเปลี่ยน interface แนวตั้งและแนวนอน

Day19-ทำ Flip Card ด้วย flip_card package

Day18-สร้าง ListView จากไฟล์ json

Day17-ทำ Splash Screen ง่ายๆด้วย splashscreen package

Day16-สร้าง Bottom Navigation Bar

Day15-สร้าง Animated Container

Day14-สร้าง Page Navigation Animation ง่ายๆ

Day13-สร้างหน้าจอ slideshow ด้วย carousel_slider package

Day12-สร้างBar Graph ด้วย charts_flutter package

Day11-การทำ Animated Bar Graph จากค่าสุ่มอย่างง่ายๆ

Day10-การทำ Bar Graph จากค่าสุ่มอย่างง่ายๆ

Day09-สร้าง Animationให้ Bar Graph

Day08-ทำ OnBoarding Screen ด้วย Package introduction_screen

Day07-สร้างInteractionง่ายๆบน Page Layout

Day06-สร้าง Page Layout

Day05-สร้าง Chat Screen UI

Day04-สร้าง Interaction ให้กับไอคอนและเก็บค่าสถานะ

Day03-stateless/stateful กับโครงสร้างในการเขียนapp

Day02-Basic Flutter Widget

Day01-เป้าหมายและแหล่งข้อมูลในการเรียนรู้Flutter ด้วยตนเอง

--

--