1
+ import 'dart:async' ;
2
+
1
3
import 'package:flutter/material.dart' ;
2
4
import 'package:flutter_constraintlayout/src/constraint_layout.dart' ;
3
5
4
6
import 'custom_app_bar.dart' ;
5
7
6
- class PinnedPositionExample extends StatelessWidget {
8
+ class PinnedPositionExample extends StatefulWidget {
7
9
const PinnedPositionExample ({Key ? key}) : super (key: key);
8
10
11
+ @override
12
+ State createState () => PinnedPositionExampleState ();
13
+ }
14
+
15
+ class PinnedPositionExampleState extends State <PinnedPositionExample > {
16
+ late Timer timer;
17
+ int angle = 0 ;
18
+
19
+ @override
20
+ void initState () {
21
+ super .initState ();
22
+ timer = Timer .periodic (const Duration (milliseconds: 16 ), (_) {
23
+ setState (() {
24
+ angle++ ;
25
+ angle %= 360 ;
26
+ });
27
+ });
28
+ }
29
+
30
+ @override
31
+ void dispose () {
32
+ super .dispose ();
33
+ timer.cancel ();
34
+ }
35
+
9
36
@override
10
37
Widget build (BuildContext context) {
11
38
ConstraintId anchor = ConstraintId ('anchor' );
@@ -26,14 +53,63 @@ class PinnedPositionExample extends StatelessWidget {
26
53
Container (
27
54
color: Colors .cyan,
28
55
).applyConstraint (
29
- size: 40 ,
56
+ size: 100 ,
30
57
pinnedInfo: PinnedInfo (
31
58
anchor,
32
- PinnedPos (0 , PinnedType .absolute, 0.5 , PinnedType .percent),
59
+ PinnedPos (0.2 , PinnedType .percent, 0.2 , PinnedType .percent),
60
+ PinnedPos (1 , PinnedType .percent, 1 , PinnedType .percent),
61
+ rotateDegree: angle,
62
+ ),
63
+ ),
64
+ Container (
65
+ color: Colors .orange,
66
+ ).applyConstraint (
67
+ size: 60 ,
68
+ pinnedInfo: PinnedInfo (
69
+ anchor,
70
+ PinnedPos (1 , PinnedType .percent, 1 , PinnedType .percent),
71
+ PinnedPos (0 , PinnedType .percent, 0 , PinnedType .percent),
72
+ rotateDegree: 360 - angle,
73
+ ),
74
+ ),
75
+ Container (
76
+ color: Colors .black,
77
+ ).applyConstraint (
78
+ size: 60 ,
79
+ pinnedInfo: PinnedInfo (
80
+ anchor,
81
+ PinnedPos (0.5 , PinnedType .percent, 0.5 , PinnedType .percent),
33
82
PinnedPos (0.5 , PinnedType .percent, 0.5 , PinnedType .percent),
34
- rotateDegree: 45 ,
83
+ rotateDegree: angle,
84
+ ),
85
+ ),
86
+ Container (
87
+ decoration: const BoxDecoration (
88
+ color: Colors .red,
89
+ borderRadius: BorderRadius .all (Radius .circular (10 )),
90
+ ),
91
+ ).applyConstraint (
92
+ size: 10 ,
93
+ centerBottomRightTo: anchor,
94
+ ),
95
+ Container (
96
+ decoration: const BoxDecoration (
97
+ color: Colors .red,
98
+ borderRadius: BorderRadius .all (Radius .circular (10 )),
35
99
),
36
- )
100
+ ).applyConstraint (
101
+ size: 10 ,
102
+ centerTopLeftTo: anchor,
103
+ ),
104
+ Container (
105
+ decoration: const BoxDecoration (
106
+ color: Colors .red,
107
+ borderRadius: BorderRadius .all (Radius .circular (10 )),
108
+ ),
109
+ ).applyConstraint (
110
+ size: 10 ,
111
+ centerTo: anchor,
112
+ ),
37
113
],
38
114
),
39
115
);
0 commit comments