-
Notifications
You must be signed in to change notification settings - Fork 29.7k
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. |
QuncCccccc
left a comment
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 |
QuncCccccc
left a comment
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:)
| 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.
HansMuller
left a comment
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 [email protected] Roll Flutter Engine from 431ed51c6415 to 168b0bf3f70d (1 revision) (flutter/flutter#127382) 2023-05-23 [email protected] Roll Flutter Engine from cc79ae858591 to 431ed51c6415 (1 revision) (flutter/flutter#127381) 2023-05-23 [email protected] Roll Flutter Engine from 311438399a45 to cc79ae858591 (1 revision) (flutter/flutter#127377) 2023-05-23 [email protected] Roll Flutter Engine from c284cd10e7ab to 311438399a45 (1 revision) (flutter/flutter#127376) 2023-05-23 [email protected] Roll Flutter Engine from 8d6602b030be to c284cd10e7ab (2 revisions) (flutter/flutter#127372) 2023-05-23 [email protected] Add M3 date picker tests and fix divider (flutter/flutter#127197) 2023-05-23 [email protected] Roll Flutter Engine from 2586cbeeae37 to 8d6602b030be (2 revisions) (flutter/flutter#127370) 2023-05-23 [email protected] Manual roll Flutter Engine from a342a9186e69 to 2586cbeeae37 (14 revisions) (flutter/flutter#127369) 2023-05-23 [email protected] [Android] Adds `namespace` to module build file templates (flutter/flutter#126963) 2023-05-23 [email protected] Revert Engine to a342a9186e69 (flutter/flutter#127368) 2023-05-23 [email protected] Roll Flutter Engine from 2a325eed77d0 to 41e8d52a006a (2 revisions) (flutter/flutter#127365) 2023-05-23 [email protected] Roll Flutter Engine from a342a9186e69 to 2a325eed77d0 (7 revisions) (flutter/flutter#127364) 2023-05-23 [email protected] Remove null-safety argument from DartPad doc samples (flutter/flutter#127345) 2023-05-22 [email protected] Support keeping a bottom sheet with a DraggableScrollableSheet from closing on drag/fling to min extent (flutter/flutter#127339) 2023-05-22 [email protected] Fix wasm-opt location when using local_web_sdk (flutter/flutter#127355) 2023-05-22 [email protected] Roll Flutter Engine from 1ed9fc0caf55 to a342a9186e69 (3 revisions) (flutter/flutter#127352) 2023-05-22 [email protected] Show warning when attempting to flutter run on an ios device with developer mode turned off (flutter/flutter#125710) 2023-05-22 [email protected] Suggest that people move to "beta" when they upgrade on "master" (flutter/flutter#127146) 2023-05-22 [email protected] add test for setting JAVA_HOME and PATH when invoking `sdkmanager --licenses` (flutter/flutter#127344) 2023-05-22 [email protected] Roll Flutter Engine from e04c14786d5a to 1ed9fc0caf55 (1 revision) (flutter/flutter#127343) 2023-05-22 [email protected] fix: Search anchor box location when used on nested navigator (flutter/flutter#127198) 2023-05-22 [email protected] [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 [email protected],[email protected],[email protected] 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
SearchAnchorwhen used with nested navigator. This solution is based on whatDropdownButtoninternally do, looking to the closestNavigatorto proper calculate the where to renderSearchViewRoute.Fixes: #126435
Fixes: #126542
Test case
Before fix:
After fix:
Pre-launch Checklist
///).