From 35bffd20d4b51e8cb7342b05bb6ce74df0b2bd2a Mon Sep 17 00:00:00 2001 From: Craig Labenz Date: Thu, 22 Apr 2021 09:54:02 -0700 Subject: [PATCH] Improved handling of AppBar's `action` Icon sizes (#78886) --- .../flutter/lib/src/material/app_bar.dart | 2 + .../flutter/test/material/app_bar_test.dart | 72 +++++++++++++++++++ 2 files changed, 74 insertions(+) diff --git a/packages/flutter/lib/src/material/app_bar.dart b/packages/flutter/lib/src/material/app_bar.dart index 163922a8c3..8876da098f 100644 --- a/packages/flutter/lib/src/material/app_bar.dart +++ b/packages/flutter/lib/src/material/app_bar.dart @@ -865,6 +865,7 @@ class _AppBarState extends State { if (hasDrawer) { leading = IconButton( icon: const Icon(Icons.menu), + iconSize: overallIconTheme.size ?? 24, onPressed: _handleDrawerButton, tooltip: MaterialLocalizations.of(context).openAppDrawerTooltip, ); @@ -938,6 +939,7 @@ class _AppBarState extends State { } else if (hasEndDrawer) { actions = IconButton( icon: const Icon(Icons.menu), + iconSize: overallIconTheme.size ?? 24, onPressed: _handleDrawerButtonEnd, tooltip: MaterialLocalizations.of(context).openAppDrawerTooltip, ); diff --git a/packages/flutter/test/material/app_bar_test.dart b/packages/flutter/test/material/app_bar_test.dart index c43073dd0a..1e2787bca9 100644 --- a/packages/flutter/test/material/app_bar_test.dart +++ b/packages/flutter/test/material/app_bar_test.dart @@ -538,6 +538,78 @@ void main() { expect(yCenter(appBarKey), equals(yCenter(action1Key))); }); + testWidgets('AppBar drawer icon has default size', (WidgetTester tester) async { + await tester.pumpWidget( + MaterialApp( + home: Scaffold( + appBar: AppBar( + title: const Text('Howdy!'), + ), + drawer: const Drawer(), + ), + ), + ); + final double iconSize = const IconThemeData.fallback().size!; + expect( + tester.getSize(find.byIcon(Icons.menu)), + equals(Size(iconSize, iconSize)), + ); + }); + + testWidgets('AppBar drawer icon is sized by iconTheme', (WidgetTester tester) async { + await tester.pumpWidget( + MaterialApp( + home: Scaffold( + appBar: AppBar( + title: const Text('Howdy!'), + iconTheme: const IconThemeData(size: 30), + ), + drawer: const Drawer(), + ), + ), + ); + expect( + tester.getSize(find.byIcon(Icons.menu)), + equals(const Size(30, 30)), + ); + }); + + testWidgets('AppBar endDrawer icon has default size', (WidgetTester tester) async { + await tester.pumpWidget( + MaterialApp( + home: Scaffold( + appBar: AppBar( + title: const Text('Howdy!'), + ), + endDrawer: const Drawer(), + ), + ), + ); + final double iconSize = const IconThemeData.fallback().size!; + expect( + tester.getSize(find.byIcon(Icons.menu)), + equals(Size(iconSize, iconSize)), + ); + }); + + testWidgets('AppBar endDrawer icon is sized by iconTheme', (WidgetTester tester) async { + await tester.pumpWidget( + MaterialApp( + home: Scaffold( + appBar: AppBar( + title: const Text('Howdy!'), + iconTheme: const IconThemeData(size: 30), + ), + endDrawer: const Drawer(), + ), + ), + ); + expect( + tester.getSize(find.byIcon(Icons.menu)), + equals(const Size(30, 30)), + ); + }); + testWidgets('leading button extends to edge and is square', (WidgetTester tester) async { await tester.pumpWidget( MaterialApp(