-
Notifications
You must be signed in to change notification settings - Fork 28.9k
fix: Search anchor box location when used on nested navigator #127198
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix: Search anchor box location when used on nested navigator #127198
Conversation
Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA). View this failed invocation of the CLA check for more information. For the most up to date status, view the checks section at the bottom of the pull request. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks so much for the fix!!
Could you also add a unit test for the fix in search_anchor_test.dart
?
Done |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM:)
@@ -357,17 +357,6 @@ class _SearchAnchorState extends State<SearchAnchor> { | |||
Navigator.of(context).pop(); | |||
} | |||
|
|||
Rect? getRect(GlobalKey key) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for removing this unused method! Didn't notice this before.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
flutter/flutter@3437189...f86c529 2023-05-23 engine-flutter-autoroll@skia.org Roll Flutter Engine from 431ed51c6415 to 168b0bf3f70d (1 revision) (flutter/flutter#127382) 2023-05-23 engine-flutter-autoroll@skia.org Roll Flutter Engine from cc79ae858591 to 431ed51c6415 (1 revision) (flutter/flutter#127381) 2023-05-23 engine-flutter-autoroll@skia.org Roll Flutter Engine from 311438399a45 to cc79ae858591 (1 revision) (flutter/flutter#127377) 2023-05-23 engine-flutter-autoroll@skia.org Roll Flutter Engine from c284cd10e7ab to 311438399a45 (1 revision) (flutter/flutter#127376) 2023-05-23 engine-flutter-autoroll@skia.org Roll Flutter Engine from 8d6602b030be to c284cd10e7ab (2 revisions) (flutter/flutter#127372) 2023-05-23 tessertaha@gmail.com Add M3 date picker tests and fix divider (flutter/flutter#127197) 2023-05-23 engine-flutter-autoroll@skia.org Roll Flutter Engine from 2586cbeeae37 to 8d6602b030be (2 revisions) (flutter/flutter#127370) 2023-05-23 engine-flutter-autoroll@skia.org Manual roll Flutter Engine from a342a9186e69 to 2586cbeeae37 (14 revisions) (flutter/flutter#127369) 2023-05-23 43054281+camsim99@users.noreply.github.com [Android] Adds `namespace` to module build file templates (flutter/flutter#126963) 2023-05-23 zanderso@users.noreply.github.com Revert Engine to a342a9186e69 (flutter/flutter#127368) 2023-05-23 engine-flutter-autoroll@skia.org Roll Flutter Engine from 2a325eed77d0 to 41e8d52a006a (2 revisions) (flutter/flutter#127365) 2023-05-23 engine-flutter-autoroll@skia.org Roll Flutter Engine from a342a9186e69 to 2a325eed77d0 (7 revisions) (flutter/flutter#127364) 2023-05-23 parlough@gmail.com Remove null-safety argument from DartPad doc samples (flutter/flutter#127345) 2023-05-22 daniel.iglesia@gmail.com Support keeping a bottom sheet with a DraggableScrollableSheet from closing on drag/fling to min extent (flutter/flutter#127339) 2023-05-22 jacksongardner@google.com Fix wasm-opt location when using local_web_sdk (flutter/flutter#127355) 2023-05-22 engine-flutter-autoroll@skia.org Roll Flutter Engine from 1ed9fc0caf55 to a342a9186e69 (3 revisions) (flutter/flutter#127352) 2023-05-22 louisehsu@google.com Show warning when attempting to flutter run on an ios device with developer mode turned off (flutter/flutter#125710) 2023-05-22 ian@hixie.ch Suggest that people move to "beta" when they upgrade on "master" (flutter/flutter#127146) 2023-05-22 andrewrkolos@gmail.com add test for setting JAVA_HOME and PATH when invoking `sdkmanager --licenses` (flutter/flutter#127344) 2023-05-22 engine-flutter-autoroll@skia.org Roll Flutter Engine from e04c14786d5a to 1ed9fc0caf55 (1 revision) (flutter/flutter#127343) 2023-05-22 38299943+VictorOhashi@users.noreply.github.com fix: Search anchor box location when used on nested navigator (flutter/flutter#127198) 2023-05-22 christopherfujino@gmail.com [flutter_tools] delete entitlements files after copying to macos build dir (flutter/flutter#126875) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/flutter-packages Please CC bmparr@google.com,rmistry@google.com,stuartmorgan@google.com on the revert to ensure that a human is aware of the problem. To file a bug in Packages: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://bugs.chromium.org/p/skia/issues/entry?template=Autoroller+Bug Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
…r#127198) This PR is to fix the position of `SearchAnchor` when used with nested navigator. This solution is based on what `DropdownButton` internally do, looking to the closest `Navigator` to proper calculate the where to render `SearchViewRoute`. Fixes: flutter#126435 <details> <summary>Test case</summary> ```dart void main() => runApp(const NestedSearchBarApp()); class NestedSearchBarApp extends StatefulWidget { const NestedSearchBarApp({super.key}); @OverRide State<NestedSearchBarApp> createState() => _NestedSearchBarAppState(); } class _NestedSearchBarAppState extends State<NestedSearchBarApp> { final SearchController controller = SearchController(); @OverRide Widget build(BuildContext context) { final ThemeData themeData = ThemeData(useMaterial3: true); return MaterialApp( theme: themeData, builder: (BuildContext context, Widget? child) { return Scaffold( body: Row( children: <Widget>[ NavigationRail( selectedIndex: 1, destinations: const <NavigationRailDestination>[ NavigationRailDestination( icon: Icon(Icons.favorite_border), selectedIcon: Icon(Icons.favorite), label: Text('First'), ), NavigationRailDestination( icon: Icon(Icons.bookmark_border), selectedIcon: Icon(Icons.book), label: Text('Second'), ), ], ), const VerticalDivider(thickness: 1, width: 1), Expanded(child: child!) ], ), ); }, home: Scaffold( appBar: AppBar(title: const Text('Search Anchor Sample')), body: Column( children: <Widget>[ SearchAnchor( searchController: controller, builder: (BuildContext context, SearchController controller) { return IconButton( icon: const Icon(Icons.search), onPressed: () { controller.openView(); }, ); }, suggestionsBuilder: (BuildContext context, SearchController controller) { return List<ListTile>.generate(5, (int index) { final String item = 'item $index'; return ListTile( title: Text(item), onTap: () { setState(() { controller.closeView(item); }); }, ); }); }), Center( child: controller.text.isEmpty ? const Text('No item selected') : Text('Selected item: ${controller.value.text}'), ), ], ), ), ); } } ``` </details> <details> <summary>Before fix:</summary>  </details> <details> <summary>After fix:</summary>  </details>
This PR is to fix the position of
SearchAnchor
when used with nested navigator. This solution is based on whatDropdownButton
internally do, looking to the closestNavigator
to proper calculate the where to renderSearchViewRoute
.Fixes: #126435
Fixes: #126542
Test case
Before fix:
After fix:
Pre-launch Checklist
///
).