From 45cf27923a2f7a4a044df4633eb350cb3789d200 Mon Sep 17 00:00:00 2001 From: Zain Ur Rehman Date: Fri, 22 Jan 2021 06:19:04 +0500 Subject: [PATCH] [showModalBottomSheet] fix: showModalBottomSheet does not move along keyboard (#71636) --- .../lib/src/material/bottom_sheet.dart | 33 +++++++++-------- .../test/material/bottom_sheet_test.dart | 35 +++++++++++++++++++ 2 files changed, 53 insertions(+), 15 deletions(-) diff --git a/packages/flutter/lib/src/material/bottom_sheet.dart b/packages/flutter/lib/src/material/bottom_sheet.dart index 21379094364..9211c13088c 100644 --- a/packages/flutter/lib/src/material/bottom_sheet.dart +++ b/packages/flutter/lib/src/material/bottom_sheet.dart @@ -375,21 +375,24 @@ class _ModalBottomSheetState extends State<_ModalBottomSheet> { return AnimatedBuilder( animation: widget.route!.animation!, - child: BottomSheet( - animationController: widget.route!._animationController, - onClosing: () { - if (widget.route!.isCurrent) { - Navigator.pop(context); - } - }, - builder: widget.route!.builder!, - backgroundColor: widget.backgroundColor, - elevation: widget.elevation, - shape: widget.shape, - clipBehavior: widget.clipBehavior, - enableDrag: widget.enableDrag, - onDragStart: handleDragStart, - onDragEnd: handleDragEnd, + child: Padding( + padding: MediaQuery.of(context).viewInsets, + child: BottomSheet( + animationController: widget.route!._animationController, + onClosing: () { + if (widget.route!.isCurrent) { + Navigator.pop(context); + } + }, + builder: widget.route!.builder!, + backgroundColor: widget.backgroundColor, + elevation: widget.elevation, + shape: widget.shape, + clipBehavior: widget.clipBehavior, + enableDrag: widget.enableDrag, + onDragStart: handleDragStart, + onDragEnd: handleDragEnd, + ), ), builder: (BuildContext context, Widget? child) { // Disable the initial animation when accessible navigation is on so diff --git a/packages/flutter/test/material/bottom_sheet_test.dart b/packages/flutter/test/material/bottom_sheet_test.dart index e6cff5c1ee4..78b8643bd8b 100644 --- a/packages/flutter/test/material/bottom_sheet_test.dart +++ b/packages/flutter/test/material/bottom_sheet_test.dart @@ -726,6 +726,41 @@ void main() { expect(retrievedRouteSettings, routeSettings); }); + + testWidgets('showModalBottomSheet should move along on-screen keyboard', + (WidgetTester tester) async { + late BuildContext savedContext; + + // Show a keyboard (simulate by space at the bottom of the screen). + await tester.pumpWidget( + MaterialApp( + home: MediaQuery( + data: const MediaQueryData(viewInsets: EdgeInsets.only(bottom: 200)), + child: Builder( + builder: (BuildContext context) { + savedContext = context; + return Container(); + }, + ), + ), + ), + ); + + await tester.pump(); + expect(find.text('BottomSheet'), findsNothing); + + showModalBottomSheet( + context: savedContext, + builder: (BuildContext context) { + return const Text('BottomSheet'); + }, + ); + + await tester.pumpAndSettle(); + + expect(find.text('BottomSheet'), findsOneWidget); + expect(tester.getBottomLeft(find.text('BottomSheet')).dy, 600); + }); } class _TestPage extends StatelessWidget {