Scaffold drawer fix (#23689)

* Adds drawer state query functions
This commit is contained in:
jslavitz 2018-10-31 16:23:44 -07:00 committed by GitHub
parent 8de86d412e
commit a63ed4e391
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 69 additions and 1 deletions

View File

@ -1045,6 +1045,22 @@ class ScaffoldState extends State<Scaffold> with TickerProviderStateMixin {
bool _drawerOpened = false; bool _drawerOpened = false;
bool _endDrawerOpened = false; bool _endDrawerOpened = false;
/// Whether the [Scaffold.drawer] is opened.
///
/// See also:
///
/// * [ScaffoldState.openDrawer], which opens the [Scaffold.drawer] of a
/// [Scaffold].
bool get isDrawerOpen => _drawerOpened;
/// Whether the [Scaffold.endDrawer] is opened.
///
/// See also:
///
/// * [ScaffoldState.openEndDrawer], which opens the [Scaffold.endDrawer] of
/// a [Scaffold].
bool get isEndDrawerOpen => _endDrawerOpened;
void _drawerOpenedCallback(bool isOpened) { void _drawerOpenedCallback(bool isOpened) {
setState(() { setState(() {
_drawerOpened = isOpened; _drawerOpened = isOpened;

View File

@ -998,8 +998,60 @@ void main() {
semantics.dispose(); semantics.dispose();
}); });
testWidgets('Dual Drawer Opening', (WidgetTester tester) async { testWidgets('Drawer state query correctly', (WidgetTester tester) async {
await tester.pumpWidget(
MaterialApp(
home: SafeArea(
left: false,
top: true,
right: false,
bottom: false,
child: Scaffold(
endDrawer: const Drawer(
child: Text('endDrawer'),
),
drawer: const Drawer(
child: Text('drawer'),
),
body: const Text('scaffold body'),
appBar: AppBar(
centerTitle: true,
title: const Text('Title')
),
),
),
),
);
final ScaffoldState scaffoldState = tester.state(find.byType(Scaffold));
final Finder drawerOpenButton = find.byType(IconButton).first;
final Finder endDrawerOpenButton = find.byType(IconButton).last;
await tester.tap(drawerOpenButton);
await tester.pumpAndSettle();
expect(true, scaffoldState.isDrawerOpen);
await tester.tap(endDrawerOpenButton);
await tester.pumpAndSettle();
expect(false, scaffoldState.isDrawerOpen);
await tester.tap(endDrawerOpenButton);
await tester.pumpAndSettle();
expect(true, scaffoldState.isEndDrawerOpen);
await tester.tap(drawerOpenButton);
await tester.pumpAndSettle();
expect(false, scaffoldState.isEndDrawerOpen);
scaffoldState.openDrawer();
expect(true, scaffoldState.isDrawerOpen);
await tester.tap(drawerOpenButton);
await tester.pumpAndSettle();
scaffoldState.openEndDrawer();
expect(true, scaffoldState.isEndDrawerOpen);
});
testWidgets('Dual Drawer Opening', (WidgetTester tester) async {
await tester.pumpWidget( await tester.pumpWidget(
MaterialApp( MaterialApp(
home: SafeArea( home: SafeArea(