94 lines
2.6 KiB
Dart
94 lines
2.6 KiB
Dart
import 'dart:ui';
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
class BNBCustomPainter2 extends CustomPainter {
|
|
@override
|
|
void paint(Canvas canvas, Size size) {
|
|
debugPrint("Drawing navbar...");
|
|
Paint paint =
|
|
Paint()
|
|
..color = const Color.fromARGB(255, 79, 76, 182)
|
|
..style = PaintingStyle.fill;
|
|
|
|
// Path path = Path();
|
|
// path.moveTo(0, 10); // Start
|
|
// path.quadraticBezierTo(size.width * 0.20, 0, size.width * 0.35, 0);
|
|
// path.quadraticBezierTo(size.width * 0.40, 0, size.width * 0.40, 20);
|
|
// path.arcToPoint(
|
|
// Offset(size.width * 0.60, 20),
|
|
// radius: Radius.circular(20.0),
|
|
// clockwise: false,
|
|
// );
|
|
// path.quadraticBezierTo(size.width * 0.60, 0, size.width * 0.63, 0);
|
|
// path.quadraticBezierTo(size.width * 0.88, 0, size.width, 10);
|
|
// path.lineTo(size.width, size.height);
|
|
// path.lineTo(0, size.height);
|
|
// path.lineTo(0, 20);
|
|
// canvas.drawShadow(path, Colors.black, 5, true);
|
|
// canvas.drawPath(path, paint);
|
|
|
|
Path path = Path();
|
|
|
|
double cornerRadius = 35; // Radius untuk sisi kiri & kanan
|
|
double centerCircleRadius = 40; // Radius untuk lengkungan tengah
|
|
|
|
// Mulai dari sisi kiri bawah
|
|
path.moveTo(cornerRadius, size.height);
|
|
|
|
// Buat lengkungan di sisi kiri
|
|
path.quadraticBezierTo(0, size.height, 0, size.height - cornerRadius);
|
|
|
|
// Tarik garis lurus ke atas sebelum lengkungan tengah
|
|
path.lineTo(0, cornerRadius);
|
|
|
|
// Kurva sisi kiri menuju bagian atas
|
|
path.quadraticBezierTo(0, 0, cornerRadius, 0);
|
|
|
|
// Garis lurus ke bagian tengah sebelum lekukan
|
|
path.lineTo(size.width / 2 - centerCircleRadius - 20, 0);
|
|
|
|
// *** Lengkungan ke atas untuk ikon tengah ***
|
|
path.quadraticBezierTo(
|
|
size.width / 2 - centerCircleRadius,
|
|
-centerCircleRadius,
|
|
size.width / 2,
|
|
-centerCircleRadius,
|
|
);
|
|
|
|
path.quadraticBezierTo(
|
|
size.width / 2 + centerCircleRadius,
|
|
-centerCircleRadius,
|
|
size.width / 2 + centerCircleRadius + 20,
|
|
0,
|
|
);
|
|
|
|
// Lanjutkan garis ke kanan
|
|
path.lineTo(size.width - cornerRadius, 0);
|
|
|
|
// Kurva sisi kanan
|
|
path.quadraticBezierTo(size.width, 0, size.width, cornerRadius);
|
|
|
|
// Tarik garis lurus ke bawah
|
|
path.lineTo(size.width, size.height - cornerRadius);
|
|
|
|
// Buat lengkungan di sisi kanan
|
|
path.quadraticBezierTo(
|
|
size.width,
|
|
size.height,
|
|
size.width - cornerRadius,
|
|
size.height,
|
|
);
|
|
|
|
// Tarik garis ke kiri hingga kembali ke titik awal
|
|
path.close();
|
|
|
|
canvas.drawPath(path, paint);
|
|
}
|
|
|
|
@override
|
|
bool shouldRepaint(CustomPainter oldDelegate) {
|
|
return false;
|
|
}
|
|
}
|