Comments (2)
So, I come up with a theory.
Looks like PopScope
implements PopEntry
. registerPopEntry
should always register to the top route, which happens inside didChangeDependencies()
method. For me, this method is not called when pushing other children's routes. This mean that other children routes pushed atop, are not registered, and PopScopes canPopNotifier
is not used.
from auto_route_library.
So I think I finally solved the issue for my case. I will try to describe the solution as best I can.
Let's take for example one nested page from my example above, e.g. IdentityVerificationStepTaxId
. This page has two "states" which means two content widgets. First _SelectIdTypeDataStateWidget
and second _FillNationalIdDataStateWidget
. This means, that once the user selects ID type, the second widget is presented to him.
My solution was to wrap the whole content inside _FillNationalIdDataStateWidget
(the second one) with PopScope the following way:
return PopScope(
canPop: false,
onPopInvoked: (didPop) => stateNotifier.clearSelectTaxIdType(),
child: Container(
This will handle the back button on that page, and always block the maybePop. It will also invoke the clearSelectTaxIdType
, which will switch UI back to _SelectIdTypeDataStateWidget
(the first one). The second widget gets disposed, including the PopScope handler, and on the second maybePop, the navigator will switch to the previous nested screen.
This solves half of my issue, with blocking of the navigation on a specific page. The second issue is to get notified every time the navigation changes, and I actually change the child navigation, which I am currently handling using NavigationObserver.
This means that on the root IdentityVerificationPage
, I have a custom nav observer, and I am handling the pop there manually. Here is a code snippet:
class _NavigationObserver extends AutoRouterObserver {
_NavigationObserver({
required this.onDidPop,
});
final void Function() onDidPop;
@override
void didPop(Route route, Route? previousRoute) {
onDidPop();
super.didPop(route, previousRoute);
}
}
AutoRouter(
navigatorObservers: () => [
_NavigationObserver(
onDidPop: () => stateNotifier.onPopInvoked(),
),
],
)
from auto_route_library.
Related Issues (20)
- Child pages are not rendered after exiting a nested initial page with the back gesture and launching from the Android launcher. HOT 9
- Regression on StackRouter.popAndPushAll()
- Cannot reload route with callback parameter HOT 1
- [BUG] deeplinkBuilder is not called
- Codegen can't find widgets, they need to be imported into the app_router file HOT 1
- Inconsistent ReevaluateListenable Behavior on Web vs. Android
- didPop & didPopNext not called HOT 1
- IOS swipe back make TextField not focus when tab on TextField when app build with flutter 3.22 HOT 2
- CustomRoute() transition gets overridden by defaultRouteType
- pushing to same screen issue
- New Xcode error out of the blue HOT 1
- [Bug] - Using the same Screen as Two routes results into an exception
- [QUESTION] Why RouteMatch operator == doesn't have args?
- AutoTabsRouter.pageView sibling views defaults to path '' HOT 2
- Cannot navigate to child route with @PathParam.inherit("param"). HOT 13
- Issues Implementing Custom rebuildAll and popAllAndPushAll Methods in auto_route HOT 3
- deepLinkBuilder && doubling element's tree HOT 1
- Pushing to sub-page in another tab and maintaining history? HOT 5
- deepLinkBuilder Not working on Production HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from auto_route_library.