| import 'package:flutter/widgets.dart'; |
| import 'package:test/test.dart'; |
| |
| import 'widget_tester.dart'; |
| |
| class TestFocusable extends StatelessComponent { |
| TestFocusable(this.no, this.yes, GlobalKey key) : super(key: key); |
| final String no; |
| final String yes; |
| Widget build(BuildContext context) { |
| bool focused = Focus.at(context, this); |
| return new GestureDetector( |
| onTap: () { Focus.moveTo(context, this); }, |
| child: new Text(focused ? yes : no) |
| ); |
| } |
| } |
| |
| void main() { |
| test('Can have multiple focused children and they update accordingly', () { |
| testWidgets((WidgetTester tester) { |
| GlobalKey keyA = new GlobalKey(); |
| GlobalKey keyB = new GlobalKey(); |
| tester.pumpWidget( |
| new Focus( |
| child: new Column(<Widget>[ |
| // reverse these when you fix https://github.com/flutter/engine/issues/1495 |
| new TestFocusable('b', 'B FOCUSED', keyB), |
| new TestFocusable('a', 'A FOCUSED', keyA), |
| ]) |
| ) |
| ); |
| expect(tester.findText('a'), isNull); |
| expect(tester.findText('A FOCUSED'), isNotNull); |
| expect(tester.findText('b'), isNotNull); |
| expect(tester.findText('B FOCUSED'), isNull); |
| tester.tap(tester.findText('A FOCUSED')); |
| tester.pump(); |
| expect(tester.findText('a'), isNull); |
| expect(tester.findText('A FOCUSED'), isNotNull); |
| expect(tester.findText('b'), isNotNull); |
| expect(tester.findText('B FOCUSED'), isNull); |
| tester.tap(tester.findText('A FOCUSED')); |
| tester.pump(); |
| expect(tester.findText('a'), isNull); |
| expect(tester.findText('A FOCUSED'), isNotNull); |
| expect(tester.findText('b'), isNotNull); |
| expect(tester.findText('B FOCUSED'), isNull); |
| tester.tap(tester.findText('b')); |
| tester.pump(); |
| expect(tester.findText('a'), isNotNull); |
| expect(tester.findText('A FOCUSED'), isNull); |
| expect(tester.findText('b'), isNull); |
| expect(tester.findText('B FOCUSED'), isNotNull); |
| tester.tap(tester.findText('a')); |
| tester.pump(); |
| expect(tester.findText('a'), isNull); |
| expect(tester.findText('A FOCUSED'), isNotNull); |
| expect(tester.findText('b'), isNotNull); |
| expect(tester.findText('B FOCUSED'), isNull); |
| }); |
| }); |
| } |