Flutter cung cấp một hệ thống vẽ đồ họa mạnh mẽ, cho phép bạn tạo các thành phần giao diện phức tạp và hiệu ứng tùy chỉnh. Trong bài viết này, chúng ta sẽ tìm hiểu về Flutter’s graphics library và cách sử dụng CustomPainter để vẽ đồ họa trong ứng dụng. Hãy cùng Neutron Academy tìm hiểu ngay nhé!
1. Giới Thiệu Về Thư Viện Đồ Họa Trong Flutter
Flutter sử dụng Canvas API để vẽ các hình dạng, đường nét, và hiệu ứng đồ họa. Hệ thống đồ họa trong Flutter bao gồm:
- Canvas: Cung cấp môi trường vẽ cho các phần tử đồ họa.
- Paint: Xác định màu sắc, độ trong suốt, độ dày nét vẽ, kiểu vẽ.
- Path: Tạo đường cong, hình dạng phức tạp bằng cách kết hợp nhiều điểm.
Bạn có thể sử dụng những công cụ này để vẽ đồ họa tùy chỉnh, tạo hiệu ứng động, hoặc xây dựng giao diện độc đáo.

2. Giới Thiệu CustomPainter
CustomPainter là một class trong Flutter giúp bạn tạo các thành phần UI tùy chỉnh bằng cách vẽ trực tiếp lên Canvas.
Để sử dụng CustomPainter, bạn cần:
1️⃣ Tạo một class kế thừa CustomPainter
2️⃣ Override phương thức paint() để vẽ trên Canvas
3️⃣ Override shouldRepaint() để kiểm tra khi nào cần vẽ lại
📌 Ví dụ: Vẽ một hình tròn màu xanh đơn giản
import 'package:flutter/material.dart';
class CirclePainter extends CustomPainter {
@override
void paint(Canvas canvas, Size size) {
final paint = Paint()
..color = Colors.blue
..style = PaintingStyle.fill;
canvas.drawCircle(size.center(Offset.zero), size.width / 2, paint);
}
@override
bool shouldRepaint(CirclePainter oldDelegate) => false;
}
class CustomPaintScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: CustomPaint(
size: Size(200, 200),
painter: CirclePainter(),
),
),
);
}
}
3. Các Kỹ Thuật Vẽ Nâng Cao Với CustomPainter
Vẽ đường cong bằng Path: Bạn có thể sử dụng Path để vẽ các đường cong mượt mà.
class CurvePainter extends CustomPainter {
@override
void paint(Canvas canvas, Size size) {
final paint = Paint()
..color = Colors.purple
..strokeWidth = 5
..style = PaintingStyle.stroke;
final path = Path();
path.moveTo(0, size.height / 2);
path.quadraticBezierTo(size.width / 2, 0, size.width, size.height / 2);
canvas.drawPath(path, paint);
}
@override
bool shouldRepaint(CurvePainter oldDelegate) => false;
}
Gradient giúp đồ họa trở nên sinh động hơn. Bạn có thể sử dụng shader để vẽ hiệu ứng chuyển màu:
final paint = Paint()
..shader = LinearGradient(
colors: [Colors.blue, Colors.purple],
).createShader(Rect.fromLTWH(0, 0, size.width, size.height));
4. Khi Nào Nên Sử Dụng CustomPainter?
Bạn nên sử dụng CustomPainter trong những trường hợp:
- Khi bạn cần tạo UI độc đáo, không thể xây dựng bằng widget thông thường.
- Khi bạn cần tối ưu hiệu suất, vẽ ít chi tiết hơn thay vì dùng nhiều widget.
- Khi bạn muốn tạo hiệu ứng động, như vẽ đường vẽ theo thao tác của người dùng
Xem thêm Khám phá các layout widgets trong Flutter
5. Ứng Dụng Thực Tế Của CustomPainter
CustomPainter thường được ứng dụng trong những trường hợp:
- Tạo hình nền động, hiệu ứng trang trí.
- Vẽ biểu đồ (chart, graph)
- Hiệu ứng splash screen, loading animation.
- Vẽ chữ ký người dùng
Kết luận
Thư viện đồ họa của Flutter cùng với CustomPainter mang lại sức mạnh tuyệt vời để tạo các hiệu ứng đồ họa phức tạp và giao diện UI tùy chỉnh. Nếu bạn muốn đưa ứng dụng lên một tầm cao mới, hãy thử ngay!
Chúc bạn thành công trên con đường công nghệ thông tin!