Skip to content

Commit 7d5c1c0

Browse files
authored
Enhances intuitiveness of RawMagnifier's example (flutter#150308)
### Demo | Before | After | | --------------- | --------------- | <video src="https://github.com/flutter/flutter/assets/104349824/ee6d45f1-bcf0-4136-8d1d-a642e0767322"/> | <video src="https://github.com/flutter/flutter/assets/104349824/1e2bb33d-40f1-4cf6-9999-f67bef638633"/> ### Related issue Fixes flutter#150307
1 parent 89c88ae commit 7d5c1c0

File tree

2 files changed

+31
-20
lines changed

2 files changed

+31
-20
lines changed

examples/api/lib/widgets/magnifier/magnifier.0.dart

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ class MagnifierExampleApp extends StatefulWidget {
1414
}
1515

1616
class _MagnifierExampleAppState extends State<MagnifierExampleApp> {
17-
Offset dragGesturePosition = Offset.zero;
17+
static const double magnifierRadius = 50.0;
18+
Offset dragGesturePosition = const Offset(100, 100);
1819

1920
@override
2021
Widget build(BuildContext context) {
@@ -34,18 +35,23 @@ class _MagnifierExampleAppState extends State<MagnifierExampleApp> {
3435
dragGesturePosition = details.localPosition;
3536
},
3637
),
38+
onPanDown: (DragDownDetails details) => setState(
39+
() {
40+
dragGesturePosition = details.localPosition;
41+
},
42+
),
3743
child: const FlutterLogo(size: 200),
3844
),
3945
Positioned(
40-
left: dragGesturePosition.dx,
41-
top: dragGesturePosition.dy,
46+
left: dragGesturePosition.dx - magnifierRadius,
47+
top: dragGesturePosition.dy - magnifierRadius,
4248
child: const RawMagnifier(
4349
decoration: MagnifierDecoration(
4450
shape: CircleBorder(
4551
side: BorderSide(color: Colors.pink, width: 3),
4652
),
4753
),
48-
size: Size(100, 100),
54+
size: Size(magnifierRadius * 2, magnifierRadius * 2),
4955
magnificationScale: 2,
5056
),
5157
)

examples/api/test/widgets/magnifier/magnifier.0_test.dart

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -19,33 +19,38 @@ void main() {
1919
);
2020
}
2121

22-
expect(
23-
tester.widget(find.byType(Positioned)),
24-
isPositionedAt(Offset.zero),
25-
);
26-
27-
final Offset centerOfFlutterLogo = tester.getCenter(find.byType(Positioned));
28-
final Offset topLeftOfFlutterLogo = tester.getTopLeft(find.byType(FlutterLogo));
29-
22+
// Make sure magnifier is present.
23+
final Finder positionedWidget = find.byType(Positioned);
24+
final Widget positionedWidgetInTree = tester.widget(positionedWidget);
25+
final Positioned oldConcretePositioned = positionedWidgetInTree as Positioned;
26+
expect(positionedWidget, findsOneWidget);
27+
28+
// Confirm if magnifier is in the center of the FlutterLogo.
29+
final Offset centerOfPositioned = tester.getCenter(positionedWidget);
30+
final Offset centerOfFlutterLogo = tester.getCenter(find.byType(FlutterLogo));
31+
expect(centerOfPositioned, equals(centerOfFlutterLogo));
32+
33+
// Drag the magnifier and confirm its new position is expected.
3034
const Offset dragDistance = Offset(10, 10);
31-
32-
await tester.dragFrom(centerOfFlutterLogo, dragDistance);
35+
final Offset updatedPositioned = Offset(
36+
oldConcretePositioned.left ?? 0.0 + 10.0,
37+
oldConcretePositioned.top ?? 0.0 + 10.0,
38+
);
39+
await tester.dragFrom(centerOfPositioned, dragDistance);
3340
await tester.pump();
34-
3541
expect(
36-
tester.widget(find.byType(Positioned)),
37-
// Need to adjust by the topleft since the position is local.
38-
isPositionedAt((centerOfFlutterLogo - topLeftOfFlutterLogo) + dragDistance),
42+
positionedWidgetInTree,
43+
isPositionedAt(updatedPositioned),
3944
);
4045
});
4146

4247
testWidgets('should match golden', (WidgetTester tester) async {
4348
await tester.pumpWidget(const example.MagnifierExampleApp());
4449

45-
final Offset centerOfFlutterLogo = tester.getCenter(find.byType(Positioned));
50+
final Offset centerOfPositioned = tester.getCenter(find.byType(Positioned));
4651
const Offset dragDistance = Offset(10, 10);
4752

48-
await tester.dragFrom(centerOfFlutterLogo, dragDistance);
53+
await tester.dragFrom(centerOfPositioned, dragDistance);
4954
await tester.pump();
5055

5156
await expectLater(

0 commit comments

Comments
 (0)