From 20b68c28a2e9e275f724767f26f1d4b21885e214 Mon Sep 17 00:00:00 2001 From: GodHyum <38372691+gusghrlrl101@users.noreply.github.com> Date: Tue, 24 Nov 2020 02:38:03 +0900 Subject: [PATCH] FloatingActionButton always keeps the same position when FloatingActionButtonLocation is top. (#64746) --- .../flutter/lib/src/material/scaffold.dart | 4 ++- .../flutter/test/material/scaffold_test.dart | 30 +++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/packages/flutter/lib/src/material/scaffold.dart b/packages/flutter/lib/src/material/scaffold.dart index e2ec6a89144..7e89bf54303 100644 --- a/packages/flutter/lib/src/material/scaffold.dart +++ b/packages/flutter/lib/src/material/scaffold.dart @@ -959,7 +959,9 @@ class _ScaffoldLayout extends MultiChildLayoutDelegate { final ScaffoldPrelayoutGeometry currentGeometry = ScaffoldPrelayoutGeometry( bottomSheetSize: bottomSheetSize, contentBottom: contentBottom, - contentTop: contentTop, + /// [appBarHeight] should be used instead of [contentTop] because + /// ScaffoldPrelayoutGeometry.contentTop must not be affected by [extendBodyBehindAppBar]. + contentTop: appBarHeight, floatingActionButtonSize: fabSize, minInsets: minInsets, scaffoldSize: size, diff --git a/packages/flutter/test/material/scaffold_test.dart b/packages/flutter/test/material/scaffold_test.dart index 8675a63d1b2..439e3c6c253 100644 --- a/packages/flutter/test/material/scaffold_test.dart +++ b/packages/flutter/test/material/scaffold_test.dart @@ -2031,6 +2031,36 @@ void main() { ); await tester.pumpAndSettle(); }); + + testWidgets('FloatingActionButton always keeps the same position regardless of extendBodyBehindAppBar', (WidgetTester tester) async { + await tester.pumpWidget(MaterialApp( + home: Scaffold( + appBar: AppBar(), + floatingActionButton: FloatingActionButton( + onPressed: () {}, + child: const Icon(Icons.add), + ), + floatingActionButtonLocation: FloatingActionButtonLocation.endTop, + extendBodyBehindAppBar: false, + ), + )); + final Offset defaultOffset = tester.getCenter(find.byType(FloatingActionButton)); + + await tester.pumpWidget(MaterialApp( + home: Scaffold( + appBar: AppBar(), + floatingActionButton: FloatingActionButton( + onPressed: () {}, + child: const Icon(Icons.add), + ), + floatingActionButtonLocation: FloatingActionButtonLocation.endTop, + extendBodyBehindAppBar: true, + ), + )); + final Offset extendedBodyOffset = tester.getCenter(find.byType(FloatingActionButton)); + + expect(defaultOffset.dy, extendedBodyOffset.dy); + }); }); testWidgets('ScaffoldMessenger.maybeOf can return null if not found', (WidgetTester tester) async {