// 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/material/popup_menu/popup_menu.2.dart' as example; import 'package:flutter_test/flutter_test.dart'; void main() { testWidgets('Popup animation can be customized using AnimationStyle', (WidgetTester tester) async { await tester.pumpWidget( const example.PopupMenuApp(), ); // Test the default popup animation. await tester.tap(find.byIcon(Icons.more_vert)); await tester.pump(); // Advance the animation by half of the default duration. await tester.pump(const Duration(milliseconds: 100)); expect(tester.getSize(find.byType(Material).last), within(distance: 0.1, from: const Size(224.0, 130.0))); // Let the animation finish. await tester.pumpAndSettle(); expect(tester.getSize(find.byType(Material).last), within(distance: 0.1, from: const Size(224.0, 312.0))); // Tap outside the popup menu to close it. await tester.tapAt(const Offset(1, 1)); await tester.pumpAndSettle(); // Test the custom animation curve and duration. await tester.tap(find.text('Custom')); await tester.pumpAndSettle(); await tester.tap(find.byIcon(Icons.more_vert)); await tester.pump(); // Advance the animation by one third of the custom duration. await tester.pump(const Duration(milliseconds: 1000)); expect(tester.getSize(find.byType(Material).last), within(distance: 0.1, from: const Size(224.0, 312.0))); // Let the animation finish. await tester.pumpAndSettle(); expect(tester.getSize(find.byType(Material).last), within(distance: 0.1, from: const Size(224.0, 312.0))); // Tap outside the popup menu to close it. await tester.tapAt(const Offset(1, 1)); await tester.pumpAndSettle(); // Test the no animation style. await tester.tap(find.text('None')); await tester.pumpAndSettle(); await tester.tap(find.byIcon(Icons.more_vert)); // Advance the animation by only one frame. await tester.pump(); // The popup menu is shown immediately. expect(tester.getSize(find.byType(Material).last), within(distance: 0.1, from: const Size(224.0, 312.0))); }); }