Unverified Commit 39bf9681 authored by Victor Ohashi's avatar Victor Ohashi Committed by GitHub

fix: SearchAnchor View not resizing when in nested navigator (#128357)

Similar to what was done on https://github.com/flutter/flutter/pull/127198, look for the closest navigator instead of screen size.

Fixes: https://github.com/flutter/flutter/issues/128344
parent d99e5fdd
...@@ -489,7 +489,8 @@ class _SearchViewRoute extends PopupRoute<_SearchViewRoute> { ...@@ -489,7 +489,8 @@ class _SearchViewRoute extends PopupRoute<_SearchViewRoute> {
} }
void updateTweens(BuildContext context) { void updateTweens(BuildContext context) {
final Size screenSize = MediaQuery.of(context).size; final RenderBox navigator = Navigator.of(context).context.findRenderObject()! as RenderBox;
final Size screenSize = navigator.size;
final Rect anchorRect = getRect() ?? Rect.zero; final Rect anchorRect = getRect() ?? Rect.zero;
final BoxConstraints effectiveConstraints = viewConstraints ?? viewTheme.constraints ?? viewDefaults.constraints!; final BoxConstraints effectiveConstraints = viewConstraints ?? viewTheme.constraints ?? viewDefaults.constraints!;
......
...@@ -1789,6 +1789,50 @@ void main() { ...@@ -1789,6 +1789,50 @@ void main() {
expect(searchViewRect.topLeft, equals(const Offset(rootSpacing, rootSpacing))); expect(searchViewRect.topLeft, equals(const Offset(rootSpacing, rootSpacing)));
}); });
testWidgets('Docked search view with nested navigator does not go off the screen', (WidgetTester tester) async {
addTearDown(tester.view.reset);
tester.view.physicalSize = const Size(400.0, 400.0);
tester.view.devicePixelRatio = 1.0;
const double rootSpacing = 100.0;
await tester.pumpWidget(MaterialApp(
builder: (BuildContext context, Widget? child) {
return Scaffold(
body: Padding(
padding: const EdgeInsets.all(rootSpacing),
child: child,
),
);
},
home: Material(
child: Align(
alignment: Alignment.bottomRight,
child: SearchAnchor(
isFullScreen: false,
builder: (BuildContext context, SearchController controller) {
return IconButton(
icon: const Icon(Icons.search),
onPressed: () {
controller.openView();
},
);
},
suggestionsBuilder: (BuildContext context, SearchController controller) {
return <Widget>[];
},
),
),
),
));
await tester.tap(find.byIcon(Icons.search));
await tester.pumpAndSettle();
final Rect searchViewRect = tester.getRect(find.descendant(of: findViewContent(), matching: find.byType(SizedBox)).first);
expect(searchViewRect.bottomRight, equals(const Offset(300.0, 300.0)));
});
// Regression tests for https://github.com/flutter/flutter/issues/126623 // Regression tests for https://github.com/flutter/flutter/issues/126623
group('Overall InputDecorationTheme does not impact SearchBar and SearchView', () { group('Overall InputDecorationTheme does not impact SearchBar and SearchView', () {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment