Виджет CustomPaint
Виджет CustomPaint вызывает CustomPainter, чтобы нарисовать фигуры на Canvas.
Объект рисования передают в painter.
Дочерний виджет можно положить поверх рисунка, а можно не задавать.
Синтаксис
CustomPaint(
painter: painter,
child: child,
)
Параметры
| Параметр | Описание |
|---|---|
painter |
Объект, который рисует на холсте до дочернего виджета. |
child |
Дочерний виджет поверх рисунка. Можно не задавать. |
Пример
Давайте нарисуем синий прямоугольник кистью:
import 'package:flutter/material.dart';
void main()
{
runApp(
MaterialApp(
home: Scaffold(
body: Center(
child: CustomPaint(
painter: _BoxPainter(),
child: SizedBox(width: 160, height: 80),
),
),
),
),
);
}
class _BoxPainter extends CustomPainter
{
@override
void paint(Canvas canvas, Size size)
{
Paint paint = Paint()..color = Color(0xFF1565C0);
canvas.drawRect(Offset.zero & size, paint);
}
@override
bool shouldRepaint(covariant CustomPainter oldDelegate)
{
return false;
}
}
На экране синий прямоугольник 160 на 80.
Пример
Давайте поверх заливки положим строку дочерним виджетом:
import 'package:flutter/material.dart';
void main()
{
runApp(
MaterialApp(
home: Scaffold(
body: Center(
child: CustomPaint(
painter: _BoxPainter(),
child: SizedBox(
width: 160,
height: 80,
child: Center(
child: Text(
'12345',
style: TextStyle(color: Color(0xFFFFFFFF)),
),
),
),
),
),
),
),
);
}
class _BoxPainter extends CustomPainter
{
@override
void paint(Canvas canvas, Size size)
{
Paint paint = Paint()..color = Color(0xFF2E7D32);
canvas.drawRect(Offset.zero & size, paint);
}
@override
bool shouldRepaint(covariant CustomPainter oldDelegate)
{
return false;
}
}
На экране зелёный прямоугольник и белая строка '12345' по центру.
Смотрите также
-
виджет
RotatedBox,
поворот на четверти оборота -
виджет
Transform,
сдвиг, поворот, масштаб -
класс
CustomPainter,
код рисунка -
класс
Canvas,
холст внутриCustomPainter