import 'dart:math'; import 'package:flutter/material.dart'; class GestureWidget extends StatefulWidget { @override _GestureWidgetState createState() => _GestureWidgetState(); } class _GestureWidgetState extends State { double _scale = 1.0; Offset _offset = Offset.zero; double _rotation = 0.0; Offset _initialFocalPoint = Offset.zero; Offset _previousOffset = Offset.zero; @override Widget build(BuildContext context) { return GestureDetector( onScaleStart: (details) { _initialFocalPoint = details.localFocalPoint; _previousOffset = _offset; }, onScaleUpdate: (details) { setState(() { if (details.pointerCount == 1) { // Tek parmakla rotate işlemi manuel olarak hesaplanıyor Offset delta = details.localFocalPoint - _initialFocalPoint; _rotation = delta.direction; // Burada rotate event'ını işleyebilirsiniz print('Rotate: $_rotation'); } else { // Çift parmakla pan ve zoom işlemi _scale = details.scale; _offset = details.localFocalPoint - _initialFocalPoint + _previousOffset; // Burada pan ve zoom event'larını işleyebilirsiniz print('Scale: $_scale, Offset: $_offset'); } }); }, onScaleEnd: (details) { _previousOffset = _offset; }, child: Container( width: 200, height: 200, color: Colors.blue, child: Center( child: Text('Transform Me!'), ), ), ); } }