Skip to content

Commit 049d1b8

Browse files
author
fbchen
committed
add circle position support
1 parent 43f75bd commit 049d1b8

File tree

4 files changed

+58
-2
lines changed

4 files changed

+58
-2
lines changed

example/circle_position.dart

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import 'package:flutter/material.dart';
2+
import 'package:flutter_constraintlayout/src/constraint_layout.dart';
3+
4+
import 'custom_app_bar.dart';
5+
6+
class CirclePositionExample extends StatelessWidget {
7+
const CirclePositionExample({Key? key}) : super(key: key);
8+
9+
@override
10+
Widget build(BuildContext context) {
11+
return Scaffold(
12+
appBar: const CustomAppBar(
13+
title: 'Circle Position',
14+
codePath: 'example/circle_position.dart',
15+
),
16+
body: ConstraintLayout(
17+
children: [
18+
Container(
19+
color: Colors.redAccent,
20+
).applyConstraint(
21+
width: 100,
22+
height: 100,
23+
centerTo: parent,
24+
),
25+
for (int angle = 0; angle <= 360; angle += 15)
26+
Container(
27+
color: Colors.yellow,
28+
).applyConstraint(
29+
width: 50,
30+
height: 50,
31+
centerTo: rId(0),
32+
translate: circleTranslate(
33+
radius: 300,
34+
angle: angle,
35+
),
36+
),
37+
],
38+
),
39+
);
40+
}
41+
}

example/home.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import 'package:flutter_constraintlayout/flutter_constraintlayout.dart';
33

44
import 'badge.dart';
55
import 'barrier.dart';
6+
import 'circle_position.dart';
67
import 'complex_list.dart';
78
import 'dimension_ratio.dart';
89
import 'grid.dart';
@@ -32,6 +33,7 @@ class ExampleHome extends StatelessWidget {
3233
'Horizontal List': const HorizontalListExample(),
3334
'Vertical List': const VerticalListExample(),
3435
'Staggered Grid': const StaggeredGridExample(),
36+
'Circle Position': const CirclePositionExample(),
3537
'Chain (Coming soon)': null,
3638
};
3739

@@ -58,7 +60,7 @@ class ExampleHome extends StatelessWidget {
5860
),
5961
left: parent.left,
6062
top: rId(0).bottom,
61-
itemCount: 13,
63+
itemCount: keyList.length,
6264
columnCount: 1,
6365
itemWidth: matchParent,
6466
itemHeight: 40,

lib/src/constraint_layout.dart

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import 'dart:collection';
22
import 'dart:convert';
3+
import 'dart:math';
34
import 'dart:ui' as ui;
45
import 'dart:ui';
56

@@ -92,6 +93,17 @@ class ConstraintLayout extends MultiChildRenderObjectWidget {
9293
}
9394
}
9495

96+
Offset circleTranslate({
97+
required double radius,
98+
required int angle,
99+
}) {
100+
assert(radius >= 0 && radius != double.infinity);
101+
assert(angle >= 0 && angle <= 360);
102+
double xTranslate = sin((angle / 180) * pi) * radius;
103+
double yTranslate = -cos((angle / 180) * pi) * radius;
104+
return Offset(xTranslate, yTranslate);
105+
}
106+
95107
List<Widget> constraintGrid({
96108
required ConstraintId id,
97109
required _Align left,

pubspec.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,5 @@ flutter:
3434
- example/grid.dart
3535
- example/horizontal_list.dart
3636
- example/vertical_list.dart
37-
- example/staggered_grid.dart
37+
- example/staggered_grid.dart
38+
- example/circle_position.dart

0 commit comments

Comments
 (0)