66 lines
2.3 KiB
Dart
66 lines
2.3 KiB
Dart
// lib/presentation/widgets/onboarding_indicator_painter.dart
|
|
import 'dart:math';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:proxibuy/core/config/app_colors.dart';
|
|
|
|
|
|
class OnboardingIndicatorPainter extends CustomPainter {
|
|
final int pageCount;
|
|
final int currentPage;
|
|
final Color activeColor;
|
|
final Color inactiveColor;
|
|
final double strokeWidth;
|
|
|
|
OnboardingIndicatorPainter({
|
|
required this.pageCount,
|
|
required this.currentPage,
|
|
this.activeColor = AppColors.primary,
|
|
this.inactiveColor = AppColors.unselected,
|
|
this.strokeWidth = 6.0,
|
|
});
|
|
|
|
@override
|
|
void paint(Canvas canvas, Size size) {
|
|
final center = Offset(size.width / 2, size.height / 2);
|
|
final radius = min(size.width, size.height) / 2;
|
|
|
|
// ================== شروع تغییرات ==================
|
|
|
|
// 1. تعریف اندازه فاصله بین قوسها (بر حسب درجه)
|
|
// این عدد را میتوانید برای کم و زیاد کردن فاصله تغییر دهید
|
|
const double gapInDegrees = 30.0;
|
|
const double gapInRadians = gapInDegrees * (pi / 180);
|
|
|
|
// 2. محاسبه طول جدید هر قوس (۹۰ درجه منهای اندازه فاصله)
|
|
const double arcAngle = (pi / 2) - gapInRadians;
|
|
|
|
// =================== پایان تغییرات ===================
|
|
|
|
|
|
final startAngles = [-pi / 2, 0.0, pi / 2, pi];
|
|
|
|
for (int i = 0; i < pageCount; i++) {
|
|
final paint = Paint()
|
|
..color = (i == currentPage) ? activeColor : inactiveColor
|
|
..style = PaintingStyle.stroke
|
|
..strokeWidth = strokeWidth
|
|
..strokeCap = StrokeCap.round; // StrokeCap.round لبههای خط را گرد میکند که زیباتر است
|
|
|
|
// 3. محاسبه نقطه شروع جدید (با افزودن نصف فاصله برای وسطچین شدن)
|
|
final correctedStartAngle = startAngles[i] + (gapInRadians / 2);
|
|
|
|
canvas.drawArc(
|
|
Rect.fromCircle(center: center, radius: radius),
|
|
correctedStartAngle, // استفاده از نقطه شروع اصلاح شده
|
|
arcAngle, // استفاده از طول قوس جدید
|
|
false,
|
|
paint,
|
|
);
|
|
}
|
|
}
|
|
|
|
@override
|
|
bool shouldRepaint(covariant CustomPainter oldDelegate) {
|
|
return true;
|
|
}
|
|
} |