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
Implement url support for RouteInformation and didPushRouteInformation #119968
Conversation
7c3ea56
to
77f6b10
Compare
const RouteInformation({this.location, this.state}); | ||
const RouteInformation({ | ||
@Deprecated( | ||
'Passes Uri.parse(location) to uri parameter instead. ' |
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.
'Passes Uri.parse(location) to uri parameter instead. ' | |
'Pass Uri.parse(location) to uri parameter instead. ' |
const RouteInformation({ | ||
@Deprecated( | ||
'Passes Uri.parse(location) to uri parameter instead. ' | ||
'MaterialApp never introduces its own MediaQuery; the View widget takes care of that. ' |
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.
Update this?
/// The string is usually in the format of multiple string identifiers with | ||
/// slashes in between. ex: `/`, `/path`, `/path/to/the/app`. |
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.
Does this still make sense now that the type is Uri and not String?
@@ -647,7 +647,7 @@ mixin WidgetsBinding on BindingBase, ServicesBinding, SchedulerBinding, GestureB | |||
if ( | |||
await observer.didPushRouteInformation( | |||
RouteInformation( | |||
location: routeArguments['location'] as String, | |||
uri: Uri.parse(routeArguments['location'] as String), |
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.
What is the purpose of this PR? It seems like all it effectively does is parse the string here into an URI, only to convert it back to a string above in line 91. It never does anything useful with the URI representation?
(Or is this just meant as a check that location
has proper URI format? In that case, should we just do the parsing in an assert? Or is this user-provided input and we need to always verify this even in release mode?)
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.
The purpose is to prepare this api so that engine can start sending full uri like http://www.mywebsite.com/mypath
. This is important for apps that want to handle deeplinks from different web domains.
The line 91 is for backward compatibility that does not use router API.
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.
OK, but before and after this change the engine is always just sending a string. The only difference is that with this change the string is parsed into an URI representation on the framework side. And just from looking at this PR its not clear why we need to do this parsing. All I see is strings getting parsed into URIs and turned back into strings. We never do anything interesting with the URI representation. So, why this change? What does this enable that we couldn't do before? Or do we just want to ensure that what the engine sends over MUST be URI-parsable?
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.
This pr also add new getter RouteInformation.uri
.
It lets developer to query RouteInformation.uri.scheme or RouteInformation.uri.host when they write their routing code.
@@ -42,15 +42,51 @@ class RouteInformation { | |||
/// Creates a route information object. | |||
/// | |||
/// The arguments may be null. |
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.
This is no longer true, either uri or location must be non-null.
77f6b10
to
c11d16d
Compare
The linux flutter_plugins ci is blocked on flutter/plugins#7133, please ignore |
return didPushRoute(routeInformation.location!); | ||
final Uri uri = routeInformation.uri; | ||
return didPushRoute( | ||
Uri.decodeComponent( |
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.
Why does this need to be decoded? Doesn't Uri.toString
below already produce something that is "decoded"?
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.
Uri.parse will encode the string, so if you do http://host.com/my path
The path will be /my%20path
which will break the existing code
@@ -647,7 +656,7 @@ mixin WidgetsBinding on BindingBase, ServicesBinding, SchedulerBinding, GestureB | |||
if ( | |||
await observer.didPushRouteInformation( | |||
RouteInformation( | |||
location: routeArguments['location'] as String, | |||
uri: Uri.parse(routeArguments['location'] as String), |
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.
Move the parsing above the for loop so it only happens once instead of over and over again for every observer?
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.
Fix this?
@@ -647,7 +647,7 @@ mixin WidgetsBinding on BindingBase, ServicesBinding, SchedulerBinding, GestureB | |||
if ( | |||
await observer.didPushRouteInformation( | |||
RouteInformation( | |||
location: routeArguments['location'] as String, | |||
uri: Uri.parse(routeArguments['location'] as String), |
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.
OK, but before and after this change the engine is always just sending a string. The only difference is that with this change the string is parsed into an URI representation on the framework side. And just from looking at this PR its not clear why we need to do this parsing. All I see is strings getting parsed into URIs and turned back into strings. We never do anything interesting with the URI representation. So, why this change? What does this enable that we couldn't do before? Or do we just want to ensure that what the engine sends over MUST be URI-parsable?
Uri.decodeComponent( | ||
Uri( | ||
path: uri.path.isEmpty ? '/' : uri.path, | ||
queryParameters: uri.queryParametersAll.isEmpty ? null : uri.queryParametersAll, | ||
fragment: uri.fragment.isEmpty ? null : uri.fragment, | ||
).toString(), | ||
), |
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.
Actually, what is the purpose of all of this? Why is this not just didPushRoute(routeInformation.uri.toString())
?
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.
The goal is that Android and iOS can start sending
http://mydomain.com/mypath
instead of just /mypath
when it is deeplinked without breaking the existing code.
const RouteInformation({ | ||
@Deprecated( | ||
'Pass Uri.parse(location) to uri parameter instead. ' | ||
'This parameter is superseded by the uri parameter. ' |
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.
maybe just remove the second line? It just repeats what the first line is already saying. Ideally, the second line should give a short explanation of why uri is replacing location.
|
||
/// The location of the application. | ||
/// | ||
/// The string is usually in the format of multiple string identifiers with | ||
/// slashes in between. ex: `/`, `/path`, `/path/to/the/app`. | ||
@Deprecated( | ||
'Use uri instead. ' | ||
'This getter is superseded by the uri getter. ' |
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.
same
return Uri.decodeComponent( | ||
Uri( | ||
path: uri.path.isEmpty ? '/' : uri.path, | ||
queryParameters: uri.queryParametersAll.isEmpty ? null : uri.queryParametersAll, | ||
fragment: uri.fragment.isEmpty ? null : uri.fragment, | ||
).toString(), | ||
); |
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.
same question as above.
This seems just hack-y. On the one hand, it tries to pretend that everything is an URI now. On the other hand, it very much still relies on the fact that sometimes it isn't ( |
Let's define Only didpushRoute and RouteInformation.location use The engine may send both What's other alternative? We can introduce a new RouteUri class and have a set of new method for didPushRouteUri, but I think that is redundent since RouteInformation is a class and can be extends to carry more data already. |
eb4e4a0
to
82718f7
Compare
Hi @chunhtai! I have a use-case in a mobile app where we're using a |
@jjoelson yes that should be supported once the github issue is supported |
This pull request executed golden file tests, but it has not been updated in a while (20+ days). Test results from Gold expire after as many days, so this pull request will need to be updated with a fresh commit in order to get results from Gold. For more guidance, visit Writing a golden file test for Reviewers: Read the Tree Hygiene page and make sure this patch meets those guidelines before LGTMing. |
will write a migration guide once this is approved |
@@ -647,7 +656,7 @@ mixin WidgetsBinding on BindingBase, ServicesBinding, SchedulerBinding, GestureB | |||
if ( | |||
await observer.didPushRouteInformation( | |||
RouteInformation( | |||
location: routeArguments['location'] as String, | |||
uri: Uri.parse(routeArguments['location'] as String), |
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.
Fix this?
@@ -1496,7 +1496,16 @@ class _WidgetsAppState extends State<WidgetsApp> with WidgetsBindingObserver { | |||
if (navigator == null) { | |||
return false; | |||
} | |||
navigator.pushNamed(route); | |||
final Uri uri = routeInformation.uri; | |||
navigator.pushNamed( |
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.
Why can we just ignore all other pieces of the URI here? Should we assert that those are empty?
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.
Navigator.pushNamed only handles path after the hostname. The host can be non-empty here, but Navigator API doesn't care about host.
if ( | ||
await observer.didPushRouteInformation( | ||
RouteInformation( | ||
uri: Uri.parse(route), |
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.
Parse this once outside of the for loop?
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
Migration guide for flutter/flutter#119968 ## Presubmit checklist - [ ] This PR doesn’t contain automatically generated corrections (Grammarly or similar). - [ ] This PR follows the [Google Developer Documentation Style Guidelines](https://developers.google.com/style) — for example, it doesn’t use _i.e._ or _e.g._, and it avoids _I_ and _we_ (first person). - [ ] This PR uses [semantic line breaks](https://github.com/dart-lang/site-shared/blob/master/doc/writing-for-dart-and-flutter-websites.md#semantic-line-breaks) of 80 characters or fewer. --------- Co-authored-by: Loïc Sharma <737941+loic-sharma@users.noreply.github.com>
g3fix cl/525552584 |
Roll Flutter from c9004ff822cf to 66fa4c5d301c (68 revisions) flutter/flutter@c9004ff...66fa4c5 2023-04-26 zanderso@users.noreply.github.com Remove web compile benchmarks that specify an attached device (flutter/flutter#125559) 2023-04-26 engine-flutter-autoroll@skia.org Roll Flutter Engine from f75908135e10 to f125a54f5a57 (1 revision) (flutter/flutter#125560) 2023-04-26 engine-flutter-autoroll@skia.org Roll Flutter Engine from c9db1587f207 to f75908135e10 (1 revision) (flutter/flutter#125558) 2023-04-26 engine-flutter-autoroll@skia.org Roll Flutter Engine from 58a5a1e3f2c1 to c9db1587f207 (1 revision) (flutter/flutter#125555) 2023-04-26 engine-flutter-autoroll@skia.org Roll Flutter Engine from 321f8015b9c2 to 58a5a1e3f2c1 (1 revision) (flutter/flutter#125552) 2023-04-26 engine-flutter-autoroll@skia.org Roll Flutter Engine from 87f5f4e939cf to 321f8015b9c2 (1 revision) (flutter/flutter#125549) 2023-04-26 goderbauer@google.com Update prefer_final_parameters comment (flutter/flutter#125465) 2023-04-26 engine-flutter-autoroll@skia.org Roll Flutter Engine from 706c023df44b to 87f5f4e939cf (1 revision) (flutter/flutter#125539) 2023-04-26 engine-flutter-autoroll@skia.org Roll Flutter Engine from 7b385abd18a2 to 706c023df44b (1 revision) (flutter/flutter#125536) 2023-04-26 engine-flutter-autoroll@skia.org Roll Flutter Engine from 610c57781b47 to 7b385abd18a2 (1 revision) (flutter/flutter#125533) 2023-04-26 engine-flutter-autoroll@skia.org Roll Flutter Engine from b3cbf0678487 to 610c57781b47 (1 revision) (flutter/flutter#125531) 2023-04-26 zanderso@users.noreply.github.com Add hostonly web compile size benchmarks (flutter/flutter#125518) 2023-04-26 engine-flutter-autoroll@skia.org Roll Flutter Engine from 34ece7a4abac to b3cbf0678487 (6 revisions) (flutter/flutter#125529) 2023-04-25 thkim1011@users.noreply.github.com Handle dollar signs properly when generating localizations (flutter/flutter#125514) 2023-04-25 engine-flutter-autoroll@skia.org Roll Flutter Engine from 6d798393a15a to 34ece7a4abac (1 revision) (flutter/flutter#125516) 2023-04-25 engine-flutter-autoroll@skia.org Roll Flutter Engine from 469e5b409686 to 6d798393a15a (2 revisions) (flutter/flutter#125513) 2023-04-25 47866232+chunhtai@users.noreply.github.com Adds selected semantics flag to radio button for Apple devices (flutter/flutter#125499) 2023-04-25 engine-flutter-autoroll@skia.org Roll Flutter Engine from 0e236982086b to 469e5b409686 (1 revision) (flutter/flutter#125510) 2023-04-25 58529443+srujzs@users.noreply.github.com Relabel JSFunction as JSExportedDartFunction (flutter/flutter#125453) 2023-04-25 engine-flutter-autoroll@skia.org Roll Flutter Engine from 60c4e61416cd to 0e236982086b (2 revisions) (flutter/flutter#125504) 2023-04-25 jmccandless@google.com iOS TextField spell check style (flutter/flutter#125432) 2023-04-25 engine-flutter-autoroll@skia.org Roll Flutter Engine from 308bce499087 to 60c4e61416cd (1 revision) (flutter/flutter#125490) 2023-04-25 engine-flutter-autoroll@skia.org Roll Flutter Engine from 54ddef68b124 to 308bce499087 (1 revision) (flutter/flutter#125485) 2023-04-25 engine-flutter-autoroll@skia.org Roll Flutter Engine from 307416f43b5a to 54ddef68b124 (1 revision) (flutter/flutter#125481) 2023-04-25 engine-flutter-autoroll@skia.org Roll Flutter Engine from 232810b36671 to 307416f43b5a (1 revision) (flutter/flutter#125475) 2023-04-25 engine-flutter-autoroll@skia.org Roll Flutter Engine from 1c4b6c0cb862 to 232810b36671 (2 revisions) (flutter/flutter#125472) 2023-04-25 engine-flutter-autoroll@skia.org Roll Flutter Engine from a26a479e86b3 to 1c4b6c0cb862 (1 revision) (flutter/flutter#125463) 2023-04-25 tessertaha@gmail.com Fix `SliverAppBar.medium` & `SliverAppBar.large` text scale (flutter/flutter#125038) 2023-04-25 engine-flutter-autoroll@skia.org Roll Flutter Engine from 3f4116c225e8 to a26a479e86b3 (1 revision) (flutter/flutter#125459) 2023-04-25 engine-flutter-autoroll@skia.org Roll Flutter Engine from 64882f4b7371 to 3f4116c225e8 (2 revisions) (flutter/flutter#125458) 2023-04-25 engine-flutter-autoroll@skia.org Roll Flutter Engine from 8fe8e94c02fc to 64882f4b7371 (1 revision) (flutter/flutter#125454) 2023-04-25 engine-flutter-autoroll@skia.org Roll Flutter Engine from 5fbde6c0fc57 to 8fe8e94c02fc (10 revisions) (flutter/flutter#125452) 2023-04-24 tessertaha@gmail.com Add Sliders to `macrobenchmarks` (flutter/flutter#125296) 2023-04-24 pateltirth454@gmail.com [date_picker] [date_range_picker] add properties to change switch-to icons (flutter/flutter#124881) 2023-04-24 thkim1011@users.noreply.github.com Sliver Constrained Cross Axis (flutter/flutter#125239) 2023-04-24 kevmoo@users.noreply.github.com tool: Move cdKey to CustomDimensionsEnum (flutter/flutter#125335) 2023-04-24 bernaferrari2@gmail.com Add `borderRadius` to LinearProgressIndicator (flutter/flutter#123517) 2023-04-24 58529443+srujzs@users.noreply.github.com Fix JS types in _test_http_request.dart (flutter/flutter#125220) 2023-04-24 tessertaha@gmail.com Fix `OutlinedButton`, `TextButton`, and `IconButton` throw exception when passing only one cursor to `styleFrom` (flutter/flutter#125204) 2023-04-24 magder@google.com Swap some iOS TESTOWNERS (flutter/flutter#125340) 2023-04-24 rmolivares@renzo-olivares.dev Fix iOS touch drag behavior (flutter/flutter#125169) 2023-04-24 54558023+keyonghan@users.noreply.github.com Mark module_test_ios flaky (flutter/flutter#125426) 2023-04-24 47866232+chunhtai@users.noreply.github.com Implement url support for RouteInformation and didPushRouteInformation (flutter/flutter#119968) 2023-04-24 kevmoo@users.noreply.github.com [tool,web] Include more info URI on Wasm init failure (flutter/flutter#125312) 2023-04-24 magder@google.com Do not run `windows_home_scroll_perf__timeline_summary` benchmark in presubmit (flutter/flutter#125343) 2023-04-24 5236035+fzyzcjy@users.noreply.github.com Tiny fix doc pointing to incorrect widget confusing the readers (flutter/flutter#125394) ...
…r#3830) Roll Flutter from c9004ff822cf to 66fa4c5d301c (68 revisions) flutter/flutter@c9004ff...66fa4c5 2023-04-26 zanderso@users.noreply.github.com Remove web compile benchmarks that specify an attached device (flutter/flutter#125559) 2023-04-26 engine-flutter-autoroll@skia.org Roll Flutter Engine from f75908135e10 to f125a54f5a57 (1 revision) (flutter/flutter#125560) 2023-04-26 engine-flutter-autoroll@skia.org Roll Flutter Engine from c9db1587f207 to f75908135e10 (1 revision) (flutter/flutter#125558) 2023-04-26 engine-flutter-autoroll@skia.org Roll Flutter Engine from 58a5a1e3f2c1 to c9db1587f207 (1 revision) (flutter/flutter#125555) 2023-04-26 engine-flutter-autoroll@skia.org Roll Flutter Engine from 321f8015b9c2 to 58a5a1e3f2c1 (1 revision) (flutter/flutter#125552) 2023-04-26 engine-flutter-autoroll@skia.org Roll Flutter Engine from 87f5f4e939cf to 321f8015b9c2 (1 revision) (flutter/flutter#125549) 2023-04-26 goderbauer@google.com Update prefer_final_parameters comment (flutter/flutter#125465) 2023-04-26 engine-flutter-autoroll@skia.org Roll Flutter Engine from 706c023df44b to 87f5f4e939cf (1 revision) (flutter/flutter#125539) 2023-04-26 engine-flutter-autoroll@skia.org Roll Flutter Engine from 7b385abd18a2 to 706c023df44b (1 revision) (flutter/flutter#125536) 2023-04-26 engine-flutter-autoroll@skia.org Roll Flutter Engine from 610c57781b47 to 7b385abd18a2 (1 revision) (flutter/flutter#125533) 2023-04-26 engine-flutter-autoroll@skia.org Roll Flutter Engine from b3cbf0678487 to 610c57781b47 (1 revision) (flutter/flutter#125531) 2023-04-26 zanderso@users.noreply.github.com Add hostonly web compile size benchmarks (flutter/flutter#125518) 2023-04-26 engine-flutter-autoroll@skia.org Roll Flutter Engine from 34ece7a4abac to b3cbf0678487 (6 revisions) (flutter/flutter#125529) 2023-04-25 thkim1011@users.noreply.github.com Handle dollar signs properly when generating localizations (flutter/flutter#125514) 2023-04-25 engine-flutter-autoroll@skia.org Roll Flutter Engine from 6d798393a15a to 34ece7a4abac (1 revision) (flutter/flutter#125516) 2023-04-25 engine-flutter-autoroll@skia.org Roll Flutter Engine from 469e5b409686 to 6d798393a15a (2 revisions) (flutter/flutter#125513) 2023-04-25 47866232+chunhtai@users.noreply.github.com Adds selected semantics flag to radio button for Apple devices (flutter/flutter#125499) 2023-04-25 engine-flutter-autoroll@skia.org Roll Flutter Engine from 0e236982086b to 469e5b409686 (1 revision) (flutter/flutter#125510) 2023-04-25 58529443+srujzs@users.noreply.github.com Relabel JSFunction as JSExportedDartFunction (flutter/flutter#125453) 2023-04-25 engine-flutter-autoroll@skia.org Roll Flutter Engine from 60c4e61416cd to 0e236982086b (2 revisions) (flutter/flutter#125504) 2023-04-25 jmccandless@google.com iOS TextField spell check style (flutter/flutter#125432) 2023-04-25 engine-flutter-autoroll@skia.org Roll Flutter Engine from 308bce499087 to 60c4e61416cd (1 revision) (flutter/flutter#125490) 2023-04-25 engine-flutter-autoroll@skia.org Roll Flutter Engine from 54ddef68b124 to 308bce499087 (1 revision) (flutter/flutter#125485) 2023-04-25 engine-flutter-autoroll@skia.org Roll Flutter Engine from 307416f43b5a to 54ddef68b124 (1 revision) (flutter/flutter#125481) 2023-04-25 engine-flutter-autoroll@skia.org Roll Flutter Engine from 232810b36671 to 307416f43b5a (1 revision) (flutter/flutter#125475) 2023-04-25 engine-flutter-autoroll@skia.org Roll Flutter Engine from 1c4b6c0cb862 to 232810b36671 (2 revisions) (flutter/flutter#125472) 2023-04-25 engine-flutter-autoroll@skia.org Roll Flutter Engine from a26a479e86b3 to 1c4b6c0cb862 (1 revision) (flutter/flutter#125463) 2023-04-25 tessertaha@gmail.com Fix `SliverAppBar.medium` & `SliverAppBar.large` text scale (flutter/flutter#125038) 2023-04-25 engine-flutter-autoroll@skia.org Roll Flutter Engine from 3f4116c225e8 to a26a479e86b3 (1 revision) (flutter/flutter#125459) 2023-04-25 engine-flutter-autoroll@skia.org Roll Flutter Engine from 64882f4b7371 to 3f4116c225e8 (2 revisions) (flutter/flutter#125458) 2023-04-25 engine-flutter-autoroll@skia.org Roll Flutter Engine from 8fe8e94c02fc to 64882f4b7371 (1 revision) (flutter/flutter#125454) 2023-04-25 engine-flutter-autoroll@skia.org Roll Flutter Engine from 5fbde6c0fc57 to 8fe8e94c02fc (10 revisions) (flutter/flutter#125452) 2023-04-24 tessertaha@gmail.com Add Sliders to `macrobenchmarks` (flutter/flutter#125296) 2023-04-24 pateltirth454@gmail.com [date_picker] [date_range_picker] add properties to change switch-to icons (flutter/flutter#124881) 2023-04-24 thkim1011@users.noreply.github.com Sliver Constrained Cross Axis (flutter/flutter#125239) 2023-04-24 kevmoo@users.noreply.github.com tool: Move cdKey to CustomDimensionsEnum (flutter/flutter#125335) 2023-04-24 bernaferrari2@gmail.com Add `borderRadius` to LinearProgressIndicator (flutter/flutter#123517) 2023-04-24 58529443+srujzs@users.noreply.github.com Fix JS types in _test_http_request.dart (flutter/flutter#125220) 2023-04-24 tessertaha@gmail.com Fix `OutlinedButton`, `TextButton`, and `IconButton` throw exception when passing only one cursor to `styleFrom` (flutter/flutter#125204) 2023-04-24 magder@google.com Swap some iOS TESTOWNERS (flutter/flutter#125340) 2023-04-24 rmolivares@renzo-olivares.dev Fix iOS touch drag behavior (flutter/flutter#125169) 2023-04-24 54558023+keyonghan@users.noreply.github.com Mark module_test_ios flaky (flutter/flutter#125426) 2023-04-24 47866232+chunhtai@users.noreply.github.com Implement url support for RouteInformation and didPushRouteInformation (flutter/flutter#119968) 2023-04-24 kevmoo@users.noreply.github.com [tool,web] Include more info URI on Wasm init failure (flutter/flutter#125312) 2023-04-24 magder@google.com Do not run `windows_home_scroll_perf__timeline_summary` benchmark in presubmit (flutter/flutter#125343) 2023-04-24 5236035+fzyzcjy@users.noreply.github.com Tiny fix doc pointing to incorrect widget confusing the readers (flutter/flutter#125394) ...
Related #100624
The goal is to make sure the engine can send a location string in either the existing format or a complete uri string to the framework, and the framework will still work as usual.
Pre-launch Checklist
///
).If you need help, consider asking for advice on the #hackers-new channel on Discord.