// 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/dropdown_menu/dropdown_menu.1.dart' as example; import 'package:flutter_test/flutter_test.dart'; void main() { testWidgets( 'The DropdownMenu should display a menu with the list of entries the user can select', (WidgetTester tester) async { await tester.pumpWidget(const example.DropdownMenuApp()); expect(find.widgetWithText(TextField, 'One'), findsOne); final Finder menu = find.byType(DropdownMenu); expect(menu, findsOne); Finder findMenuItem(String label) { return find.widgetWithText(MenuItemButton, label).last; } await tester.tap(menu); await tester.pumpAndSettle(); expect(findMenuItem('One'), findsOne); expect(findMenuItem('Two'), findsOne); expect(findMenuItem('Three'), findsOne); expect(findMenuItem('Four'), findsOne); await tester.tap(findMenuItem('Two')); // The DropdownMenu's onSelected callback is delayed // with SchedulerBinding.instance.addPostFrameCallback // to give the focus a chance to return to where it was // before the menu appeared. The pumpAndSettle() // give the callback a chance to run. await tester.pumpAndSettle(); expect(find.widgetWithText(TextField, 'Two'), findsOne); }, ); testWidgets('DropdownMenu has focus when tapping on the text field', (WidgetTester tester) async { await tester.pumpWidget(const example.DropdownMenuApp()); // Make sure the dropdown menus are there. final Finder menu = find.byType(DropdownMenu); expect(menu, findsOne); // Tap on the menu and make sure it is focused. await tester.tap(menu); await tester.pumpAndSettle(); expect(FocusScope.of(tester.element(menu)).hasFocus, isTrue); }); }