| // Copyright 2014 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import 'package:flutter/material.dart'; |
| |
| void main() => runApp(const MyApp()); |
| |
| class MyApp extends StatefulWidget { |
| const MyApp({super.key}); |
| static const Size loupeSize = Size(200, 200); |
| |
| @override |
| State<MyApp> createState() => _MyAppState(); |
| } |
| |
| class _MyAppState extends State<MyApp> { |
| Offset dragGesturePositon = Offset.zero; |
| |
| @override |
| Widget build(BuildContext context) { |
| return MaterialApp( |
| home: Scaffold( |
| body: Center( |
| child: Column( |
| mainAxisAlignment: MainAxisAlignment.center, |
| children: <Widget>[ |
| const Text('Drag on the logo!'), |
| RepaintBoundary( |
| child: Stack( |
| children: <Widget>[ |
| GestureDetector( |
| onPanUpdate: (DragUpdateDetails details) => setState( |
| () { |
| dragGesturePositon = details.localPosition; |
| }, |
| ), |
| child: const FlutterLogo(size: 200), |
| ), |
| Positioned( |
| left: dragGesturePositon.dx, |
| top: dragGesturePositon.dy, |
| child: const RawMagnifier( |
| decoration: MagnifierDecoration( |
| shape: CircleBorder( |
| side: BorderSide(color: Colors.pink, width: 3), |
| ), |
| ), |
| size: Size(100, 100), |
| magnificationScale: 2, |
| ), |
| ) |
| ], |
| ), |
| ), |
| ], |
| ), |
| ), |
| ), |
| ); |
| } |
| } |