Navigation in Flutter: `pushReplacement` vs `pushAndRemoveUntil`
pushReplacement
Imagine you're replacing an old road sign with a new one. The old one is gone, and there's no way to know it was ever there. That's what pushReplacement
does in Flutter.
Usage:
Navigator.pushReplacement(context, newRoute)
What It Does:
- Replaces the current route with a new route.
- The current route is removed from the stack, making way for the new route.
- The removed route is completely gone—pressing the back button won’t bring it back.
When to Use It:
- Ideal for scenarios like replacing a login screen with a home screen after a user logs in. You don’t want them to go back to the login screen, right?
Code Example:
Navigator.pushReplacement(
context,
MaterialPageRoute(builder: (context) => HomeScreen()),
);
pushAndRemoveUntil
Now, think of pushAndRemoveUntil
as clearing a cluttered desk, keeping only the essentials. You decide which items stay and which go. This function allows more control over which routes to remove.
Usage:
Navigator.pushAndRemoveUntil(context, newRoute, (route) => condition)
What It Does:
- Pushes a new route and removes routes below it until a specified condition is met.
- You provide a condition to determine which routes to keep or discard.
When to Use It:
- Perfect for situations like logging out, where you want to return to a clean slate (the login screen) and remove all previous screens.
Code Example:
Navigator.pushAndRemoveUntil(
context,
MaterialPageRoute(builder: (context) => LoginScreen()),
(Route<dynamic> route) => false, // Remove all previous routes.
);
Key Differences
-
Scope of Operation:
pushReplacement
swaps only the top route.pushAndRemoveUntil
can clear out multiple routes based on your condition.
-
Stack Control:
pushReplacement
provides straightforward, one-route replacement.pushAndRemoveUntil
allows for a more flexible navigation reset.
-
Use Case Scenarios:
- Use
pushReplacement
for simple replacement needs. - Use
pushAndRemoveUntil
for complex navigation flows requiring cleanup of multiple routes.
- Use