| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- import 'package:flutter/material.dart';
- /// AppBar / 工具栏用的 K 线蜡烛图图标(合约、现货等交易页共用)
- class KlineToolbarIcon extends StatelessWidget {
- const KlineToolbarIcon({super.key, required this.color});
- final Color color;
- @override
- Widget build(BuildContext context) {
- return SizedBox(
- width: 20,
- height: 20,
- child: CustomPaint(painter: _KlineToolbarPainter(color: color)),
- );
- }
- }
- class _KlineToolbarPainter extends CustomPainter {
- const _KlineToolbarPainter({required this.color});
- final Color color;
- @override
- void paint(Canvas canvas, Size size) {
- final stroke = Paint()
- ..color = color
- ..strokeWidth = 1.2
- ..style = PaintingStyle.stroke;
- final fill = Paint()
- ..color = color
- ..style = PaintingStyle.fill;
- // 4根蜡烛:(x, wickTop, bodyTop, bodyBottom, wickBottom)
- const bars = [
- (2.5, 1.0, 4.0, 11.0, 14.0),
- (7.0, 2.0, 3.5, 9.0, 13.0),
- (11.5, 4.0, 6.5, 13.0, 16.0),
- (16.0, 2.5, 4.5, 10.0, 15.0),
- ];
- const barW = 3.0;
- for (final (x, wT, bT, bB, wBtm) in bars) {
- final cx = x + barW / 2;
- canvas.drawLine(Offset(cx, wT), Offset(cx, wBtm), stroke);
- canvas.drawRect(Rect.fromLTWH(x, bT, barW, bB - bT), fill);
- }
- }
- @override
- bool shouldRepaint(covariant _KlineToolbarPainter oldDelegate) =>
- oldDelegate.color != color;
- }
|