// 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( 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(find.descendant( of: focusableTextFinder2, matching: find.byType(Focus), )).autofocus, isTrue); final Container container2 = tester.widget(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(find.descendant( of: childFinder.first, matching: find.byType(Container), )); Container container1 = tester.widget(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(find.descendant( of: childFinder.first, matching: find.byType(Container), )); container1 = tester.widget(find.descendant( of: childFinder.at(1), matching: find.byType(Container), )); expect(container0.color, Colors.white); expect(container1.color, Colors.red); }); }