| // 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/services.dart'; |
| import 'package:flutter_api_samples/widgets/focus_scope/focus.1.dart' |
| as example; |
| import 'package:flutter_test/flutter_test.dart'; |
| |
| void main() { |
| testWidgets('FocusableText shows content and color depending on focus', |
| (WidgetTester tester) async { |
| await tester.pumpWidget(const MaterialApp( |
| home: Scaffold( |
| body: example.FocusableText( |
| 'Item 0', |
| autofocus: false, |
| ), |
| ), |
| )); |
| // Autofocus needs to check that no other node in the [FocusScope] is |
| // focused and can only request focus for the second frame. |
| await tester.pumpAndSettle(); |
| expect(find.descendant( |
| of: find.byType(example.FocusableText), |
| matching: find.byType(Focus), |
| ), findsOneWidget); |
| expect(find.text('Item 0'), findsOneWidget); |
| |
| expect(find.byType(Container), findsOneWidget); |
| final Container container1 = tester.widget<Container>( |
| find.byType(Container) |
| ); |
| expect(container1.color, Colors.white); |
| |
| await tester.pumpWidget(const MaterialApp( |
| home: Scaffold( |
| body: example.FocusableText( |
| 'Item 1', |
| autofocus: true, |
| ), |
| ), |
| )); |
| await tester.pumpAndSettle(); |
| |
| final Finder focusableTextFinder2 = find.ancestor( |
| of: find.text('Item 1'), |
| matching: find.byType(example.FocusableText), |
| ); |
| expect(tester.widget<Focus>(find.descendant( |
| of: focusableTextFinder2, |
| matching: find.byType(Focus), |
| )).autofocus, isTrue); |
| final Container container2 = tester.widget<Container>(find.descendant( |
| of: focusableTextFinder2, |
| matching: find.byType(Container), |
| )); |
| expect(container2.color, Colors.red); |
| }); |
| |
| testWidgets('builds list showcasing focus traversal', |
| (WidgetTester tester) async { |
| await tester.pumpWidget(const example.FocusExampleApp()); |
| await tester.pumpAndSettle(); |
| |
| expect(find.byType(ListView), findsOneWidget); |
| |
| final Finder childFinder = find.descendant( |
| of: find.byType(ListView), |
| matching: find.byType(example.FocusableText), |
| ); |
| expect(childFinder, findsAtLeastNWidgets(2)); |
| |
| Container container0 = tester.widget<Container>(find.descendant( |
| of: childFinder.first, |
| matching: find.byType(Container), |
| )); |
| Container container1 = tester.widget<Container>(find.descendant( |
| of: childFinder.at(1), |
| matching: find.byType(Container), |
| )); |
| expect(container0.color, Colors.red); |
| expect(container1.color, Colors.white); |
| |
| await tester.sendKeyDownEvent(LogicalKeyboardKey.arrowDown); |
| await tester.pumpAndSettle(); |
| |
| container0 = tester.widget<Container>(find.descendant( |
| of: childFinder.first, |
| matching: find.byType(Container), |
| )); |
| container1 = tester.widget<Container>(find.descendant( |
| of: childFinder.at(1), |
| matching: find.byType(Container), |
| )); |
| expect(container0.color, Colors.white); |
| expect(container1.color, Colors.red); |
| }); |
| } |