| // 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/radio_list_tile/radio_list_tile.1.dart' as example; |
| import 'package:flutter_test/flutter_test.dart'; |
| |
| void main() { |
| testWidgets('Radio aligns appropriately', (WidgetTester tester) async { |
| await tester.pumpWidget( |
| const example.RadioListTileApp(), |
| ); |
| |
| expect(find.byType(RadioListTile<example.Groceries>), findsNWidgets(3)); |
| |
| Offset tileTopLeft = tester.getTopLeft(find.byType(RadioListTile<example.Groceries>).at(0)); |
| Offset radioTopLeft = tester.getTopLeft(find.byType(Radio<example.Groceries>).at(0)); |
| |
| // The radio is centered vertically with the text. |
| expect(radioTopLeft - tileTopLeft, const Offset(16.0, 16.0)); |
| |
| tileTopLeft = tester.getTopLeft(find.byType(RadioListTile<example.Groceries>).at(1)); |
| radioTopLeft = tester.getTopLeft(find.byType(Radio<example.Groceries>).at(1)); |
| |
| // The radio is centered vertically with the text. |
| expect(radioTopLeft - tileTopLeft, const Offset(16.0, 30.0)); |
| |
| tileTopLeft = tester.getTopLeft(find.byType(RadioListTile<example.Groceries>).at(2)); |
| radioTopLeft = tester.getTopLeft(find.byType(Radio<example.Groceries>).at(2)); |
| |
| // The radio is aligned to the top vertically with the text. |
| expect(radioTopLeft - tileTopLeft, const Offset(16.0, 8.0)); |
| }); |
| |
| testWidgets('Radios can be checked', (WidgetTester tester) async { |
| await tester.pumpWidget( |
| const example.RadioListTileApp(), |
| ); |
| |
| expect(find.byType(RadioListTile<example.Groceries>), findsNWidgets(3)); |
| final Finder radioListTile = find.byType(RadioListTile<example.Groceries>); |
| |
| // Initially the first radio is checked. |
| expect( |
| tester.widget<RadioListTile<example.Groceries>>(radioListTile.at(0)).groupValue, |
| example.Groceries.pickles, |
| ); |
| expect( |
| tester.widget<RadioListTile<example.Groceries>>(radioListTile.at(1)).groupValue, |
| example.Groceries.pickles, |
| ); |
| expect( |
| tester.widget<RadioListTile<example.Groceries>>(radioListTile.at(2)).groupValue, |
| example.Groceries.pickles, |
| ); |
| |
| // Tap the second radio. |
| await tester.tap(find.byType(Radio<example.Groceries>).at(1)); |
| await tester.pumpAndSettle(); |
| |
| // The second radio is checked. |
| expect( |
| tester.widget<RadioListTile<example.Groceries>>(radioListTile.at(0)).groupValue, |
| example.Groceries.tomato, |
| ); |
| expect( |
| tester.widget<RadioListTile<example.Groceries>>(radioListTile.at(1)).groupValue, |
| example.Groceries.tomato, |
| ); |
| expect( |
| tester.widget<RadioListTile<example.Groceries>>(radioListTile.at(2)).groupValue, |
| example.Groceries.tomato, |
| ); |
| |
| // Tap the third radio. |
| await tester.tap(find.byType(Radio<example.Groceries>).at(2)); |
| await tester.pumpAndSettle(); |
| |
| // The third radio is checked. |
| expect( |
| tester.widget<RadioListTile<example.Groceries>>(radioListTile.at(0)).groupValue, |
| example.Groceries.lettuce, |
| ); |
| expect( |
| tester.widget<RadioListTile<example.Groceries>>(radioListTile.at(1)).groupValue, |
| example.Groceries.lettuce, |
| ); |
| expect( |
| tester.widget<RadioListTile<example.Groceries>>(radioListTile.at(2)).groupValue, |
| example.Groceries.lettuce, |
| ); |
| }); |
| } |