Skip to content

Commit f114c64

Browse files
committed
Just a checkpoint
1 parent 9298a86 commit f114c64

File tree

1 file changed

+30
-6
lines changed

1 file changed

+30
-6
lines changed

lib/circles_selector/CirclesHomeWidget.dart

+30-6
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import 'dart:math';
2+
13
import 'package:flutter/material.dart';
24

35
class CirclesHomeWidget extends StatefulWidget {
@@ -24,7 +26,7 @@ class PannableCircleGrid extends StatefulWidget {
2426
class _PannableCircleGridState extends State<PannableCircleGrid> {
2527
Offset _offset = Offset.zero;
2628
int? _selectedIndex;
27-
final double _circleSize = 60;
29+
final double _circleSize = 40;
2830
final double _spacing = 20;
2931
final int _columns = 1000; // Arbitrary large number for columns
3032

@@ -61,7 +63,6 @@ class _PannableCircleGridState extends State<PannableCircleGrid> {
6163
int row =
6264
((tapPosition.dy - _offset.dy) / (_circleSize + _spacing)).floor();
6365
int index = row * _columns + col;
64-
6566
setState(() {
6667
_selectedIndex = (_selectedIndex == index) ? null : index;
6768
});
@@ -104,17 +105,40 @@ class CircleGridPainter extends CustomPainter {
104105

105106
for (int row = startRow; row <= endRow; row++) {
106107
for (int col = startCol; col <= endCol; col++) {
107-
final circleOffset = Offset(
108+
int index = row * columns + col;
109+
bool isSelected = selectedIndex == index;
110+
111+
Offset circleOffset = Offset(
108112
col * (circleSize + spacing) + offset.dx,
109113
row * (circleSize + spacing) + offset.dy,
110114
);
111115

112-
int index = row * columns + col;
113-
bool isSelected = selectedIndex == index;
116+
// If a circle is selected, adjust positions of surrounding circles
117+
if (selectedIndex != null) {
118+
int selectedCol = selectedIndex! % columns;
119+
int selectedRow = selectedIndex! ~/ columns;
120+
121+
double distanceX = (col - selectedCol).abs() * (circleSize + spacing);
122+
double distanceY = (row - selectedRow).abs() * (circleSize + spacing);
123+
double distance = sqrt(distanceX * distanceX + distanceY * distanceY);
124+
125+
if (distance > 0 && distance <= 2 * (circleSize + spacing)) {
126+
double angle = atan2(row - selectedRow, col - selectedCol);
127+
double pushDistance = circleSize *
128+
0.5; // Adjust this value to control the push effect
129+
130+
circleOffset += Offset(
131+
cos(angle) * pushDistance,
132+
sin(angle) * pushDistance,
133+
);
134+
}
135+
}
136+
137+
double currentCircleSize = isSelected ? circleSize : circleSize * 0.8;
114138

115139
canvas.drawCircle(
116140
circleOffset,
117-
isSelected ? circleSize * 0.6 : circleSize * 0.5,
141+
currentCircleSize,
118142
isSelected ? selectedPaint : paint,
119143
);
120144

0 commit comments

Comments
 (0)