Comments (3)
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.
i think u need this method context.router.popForced();
from auto_route_library.
Related Issues (20)
- deepLinkBuilder Not working on Production HOT 1
- Default function argument value has no import prefix
- Automatically back when use CustomRoute with swipe for back HOT 1
- Unable to Set Custom Transition Duration While Maintaining iOS Swipe Back Gesture HOT 3
- browser buttons navigation in flutter web HOT 2
- Got an error when navigation back web button with nested route HOT 5
- PopScope, Function(bool)? onPopInvoked, boolean value is always true for web even when canPop is false
- Route get reset after keyboard appears HOT 1
- Bad state: Future already completed HOT 2
- Blank screen when first opening the app HOT 3
- feat: Static functions for routes on screens HOT 3
- auto_route fragment support HOT 4
- Function pushAll won't work on WEB HOT 1
- Navigate and other functions are way slower then they should be HOT 3
- Error when using 8.14 HOT 9
- Creating feature flow using auto_route HOT 4
- When I navigate to the same route a second time, the page doesn't refresh. HOT 4
- Replacing go_router with auto_route in widget tests HOT 4
- Overide a route HOT 2
- Manage System back button with Auto route with alternative way HOT 2
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.