-
-
Notifications
You must be signed in to change notification settings - Fork 67
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
FlowBuilder breaks Navigator 2.0 system level routing (deep links specifically) #117
Comments
Thanks for reporting this! This is definitely a bug imo and FlowBuilder should both support deep linking itself as well as work nicely with existing packages. Are you able to share a minimal reproduction sample? Thanks! |
@felangel Sure! I'll throw something together soon. |
Hi @felangel here is a repro repop. https://github.com/artflutter/flow_builder_unilinks_bug Screen.Recording.2024-03-01.at.9.49.11.AM.mov |
Hi |
Good evening @felangel |
Hey sorry for the slow response I’ll try to take a look either today or tomorrow 👍 |
Hi @felangel |
Sorry this slipped through the cracks! Will try to find some time in the next few days to look 👍 |
Hi @felangel just a friendly reminder :-) |
A sImilar thing happened to me as well on the web: When I navigate to a screen that has FlowBuilder browser back (which should be the same as deep-linking) stops working |
Hi @felangel |
|
Apologies for the delay! Planning to look at this once I get back from FlutterCon next week, thanks for the bump! |
hey @felangel, just came across this and thought I'll give it another bump. :) |
Thanks will try to finally get to this this week 🤞 |
Hey @pstromberg98 @Peetee06 @uberchilly @felangel Grab your favorite food and drinks. We can do a meme party in comments :-) |
@vasilich6107 haha 😂👍🏻 Let's help @felangel out, he has more than enough on his plate. I'll look into this on the weekend and build the necessary skills to open a PR with a fix. |
@Peetee06 |
Update: It looks like this issue stems from this line: Setting the custom method call handler replaces the one set by Future<bool> _handleNavigationInvocation(MethodCall methodCall) {
return switch (methodCall.method) {
'popRoute' => handlePopRoute(),
'pushRoute' => handlePushRoute(methodCall.arguments as String),
'pushRouteInformation' => _handlePushRouteInformation(methodCall.arguments as Map<dynamic, dynamic>),
// Return false for unhandled method.
_ => Future<bool>.value(false),
};
} Because of that, the system method call I couldn't find a way to restore that handler, because it's private. Unsure if re-initializing the WidgetsBinding could be a workaround, because I don't know if that would cause other side effects. Will work on understanding the purpose of the Edit: As far as I understand, this was introduced in #14 to fix issue #12. Because it's related to the system back button, a way could be to use the |
I looked into the The We could implement the Future<bool> _handlePushRouteInformation(Map<dynamic, dynamic> routeArguments) async {
final RouteInformation routeInformation = RouteInformation(
uri: Uri.parse(routeArguments['location'] as String),
state: routeArguments['state'] as Object?,
);
for (final WidgetsBindingObserver observer in List<WidgetsBindingObserver>.of(_observers)) {
if (await observer.didPushRouteInformation(routeInformation)) {
return true;
}
}
return false;
} I also tried to add our own Unsure where to go from here. Maybe there are other solutions that I didn't find, yet? Edit: /// A mixin used by routes to handle back navigations internally by popping a list.
///
/// When a [Navigator] is instructed to pop, the current route is given an
/// opportunity to handle the pop internally. A [LocalHistoryRoute] handles the
/// pop internally if its list of local history entries is non-empty. Rather
/// than being removed as the current route, the most recent [LocalHistoryEntry]
/// is removed from the list and its [LocalHistoryEntry.onRemove] is called.
///
/// See also:
///
/// * [Route], which documents the meaning of the `T` generic type argument.
mixin LocalHistoryRoute<T> on Route<T> |
Describe the bug
Not sure if this is a "defect" of flow_builder, but it might be worth mentioning in the docs.
Using FlowBuilder alongside AutoRoute (and probably any Navigator 2.0 based solution) will break deep linking. This is because flow_builder sets its own handler for the
SystemNavigation.instance
method channel thus hijacking all system level routing calls (didPopRoute, didPushRoute, etc).To Reproduce
Steps to reproduce the behavior:
xcrun simctl openurl booted https://{your-domain}/
)deepLinkBuilder callback isn't ran
)Expected behavior
Not sure. If FlowBuilder isn't supposed to be used with Navigator 2.0 routing packages then I think it should be mentioned in the documentation or README. If we want it to be able to coexist with Navigator 2.0 routing packages then I would expect FlowBuilder to not interfere/break them.
Additional context
I have only tested this with AutoRouter and have confirmed the issue (and that removing FlowBuilder fixes it).
The text was updated successfully, but these errors were encountered: