// 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'; import 'package:flutter_api_samples/gestures/tap_and_drag/tap_and_drag.0.dart' as example; import 'package:flutter_test/flutter_test.dart'; void main() { testWidgets('Single tap + drag should not change the scale of child', ( WidgetTester tester, ) async { await tester.pumpWidget(const example.TapAndDragToZoomApp()); double getScale() { final RenderBox box = tester.renderObject(find.byType(Container).first); return box.getTransformTo(null)[0]; } final Finder containerFinder = find.byType(Container).first; final Offset centerOfChild = tester.getCenter(containerFinder); expect(getScale(), 1.0); // Single tap + drag down. final TestGesture gesture = await tester.startGesture(centerOfChild); await tester.pump(); await gesture.moveTo(centerOfChild + const Offset(0, 100.0)); await tester.pump(); expect(getScale(), 1.0); // Single tap + drag up. await gesture.moveTo(centerOfChild); await tester.pump(); expect(getScale(), 1.0); }); testWidgets('Double tap + drag should change the scale of the child', ( WidgetTester tester, ) async { await tester.pumpWidget(const example.TapAndDragToZoomApp()); double getScale() { final RenderBox box = tester.renderObject(find.byType(Container).first); return box.getTransformTo(null)[0]; } final Finder containerFinder = find.byType(Container).first; final Offset centerOfChild = tester.getCenter(containerFinder); expect(getScale(), 1.0); // Double tap + drag down to scale up. final TestGesture gesture = await tester.startGesture(centerOfChild); await tester.pump(); await gesture.up(); await tester.pump(); await gesture.down(centerOfChild); await tester.pump(); await gesture.moveTo(centerOfChild + const Offset(0, 100.0)); await tester.pump(); expect(getScale(), greaterThan(1.0)); // Scale is reset on drag end. await gesture.up(); await tester.pumpAndSettle(); expect(getScale(), 1.0); // Double tap + drag up to scale down. await gesture.down(centerOfChild); await tester.pump(); await gesture.up(); await tester.pump(); await gesture.down(centerOfChild); await tester.pump(); await gesture.moveTo(centerOfChild + const Offset(0, -100.0)); await tester.pump(); expect(getScale(), lessThan(1.0)); // Scale is reset on drag end. await gesture.up(); await tester.pumpAndSettle(); expect(getScale(), 1.0); }); }