How to solve Swipe back not working on iOS - flutter

each time i use a plugin to move to the next page on iOS the swipe back will not work like
Navigator.push(
context,
Transition(
child: Bio(),
transitionEffect: TransitionEffect.BOTTOM_TO_TOP),
);
i have use like 5 plugin now swipe back is not working
but if i use this
Navigator.pop(context);
Navigator.push(
context,
MaterialPageRoute(
builder: (ctx) => Actitvities(),
),
);
the swipe back works....
but i want to use transition for the page route

in my case.
i was using a plugin and the plugin is using
WillPopScope (
onWillPop: () async {
},
so i fork the plugin and remove the willpopscope.
then i add the fork plugin like this to my pubspeck
kittens:
git:
url: git://github.com/munificent/kittens.git
ref: some-branch
full example here

Related

How to switch the screen smoothly?

I have three screens: 1, 2, and 3.
I want to switch from screen 2 to screen 3, but when I pop screen 2 and push screen 3, then it shows screen 1 for a while, then it shows screen 3, so is there any way to switch screens using pop after push or not?
this code not expectations
Navigator.push(
context,
MaterialPageRoute<Widget>(
builder: (context) => widget,
),
);
Navigator.pop(context);
Using pushReplacement insted of push
Navigator.pushReplacement(
context,
MaterialPageRoute<Widget>(
builder: (context) => widget,
),
);
Using pushReplacement insted of push
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => widget,
),
);
The behavior you're describing is likely because when you call Navigator.pop(context), it removes the current screen (screen 2) from the navigation stack, but the framework hasn't yet had a chance to build and display the new screen (screen 3) that you pushed. So, for a brief moment, the previous screen (screen 1) is visible.
One way to switch screens without that flicker is to use Navigator.pushReplacement instead of Navigator.push followed by Navigator.pop. Navigator.pushReplacement removes the current screen from the navigation stack and replaces it with the new screen, all in one step.
Example:
Navigator.pushReplacement(
context,
MaterialPageRoute<Widget>(
builder: (context) => widget3,
),
);
This will directly switch from screen 2 to screen 3.
It is generally not recommended to use both Navigator.push() and Navigator.pop() together in the same function call, as this can cause unexpected behavior. Instead, you can use Navigator.replace() to replace the current screen with a new one, or use Navigator.pushNamedAndRemoveUntil() to push a new screen and remove all the screens that come before it.

Flutter go_router Match error found during build

I'm receiving this error every time I try to open the dynamic link
But the error is only on IOS, in Android everything works perfectly.
This is how it navigates to needed page from the dynamic link:
Navigator.push(
context,
MaterialPageRoute(builder: (context) => FlashcardDetailedPage(
flashcard: flashcard,
deck: deck,
toDownload: true,
)),
);
How to fix this?

How to set animation in pushReplacementNamed

Two screen movements are being done through pushReplacementNamed.
Navigator.pushReplacementNamed(context, '/screen_b');
Navigator.pushReplacementNamed(context, '/screen_a');
What I want is that the animation behaves in reverse when the screen to screen_b goes back to screen_a.
Now it keeps moving in only one direction. (From right to left)
I am wondering if there is a way other than push and pop.
use CupertinoPageRoute
Navigator. pushReplacementNamed(
context,
CupertinoPageRoute(
builder: (context) => yourpage(),
));
To achieve that you need to use the following in scree_a:
Navigator.pushNamed(context, '/screen_b');
In screen_b you need just pop if you want the back ainmation:
Navigator.pop(context);
And when you create your route, use CupertinoPageRoute:
CupertinoPageRoute(
builder: (_) => ScreenA/B())

Navigation in Flutter App - does not work as intended

I try to build a flutter app and want to navigate trough the pages.
I build a drawer with a menu with several items to open new pages - that works fine.
onTap: () {
Navigator.of(context).pop();
Navigator.push(
context,
new MaterialPageRoute(
builder: (BuildContext context) => new Page1(),
),
);
},
By pressing on the Page1 menuitem page1 opens fine.
Inside page1 I have a slidable list with "edit" and "details". I open this with
onTap: () {
Navigator.of(context).pop();
Navigator.push(
context,
MaterialPageRoute(
builder: (BuildContext context) => new DetailsPage(),
),
);
},
In the details Page I see all the things i wanna see, but when I press the Back button in the appBar i am back at home screen with closed drawer.
I tried to put onPressed: () => Navigator.pop(context); inside the appBar section but this doesn´t work either.
Now I got what I want by using always Navigator.push but I am sure that this is not right, so that navigator stack gets bigger and bigger.
What I do wrong? Why .pop does not bring me to the last page?
Any ideas?
Thx in advance
Patrick
Just remove the line with the Navigator.of(context).pop();in the Page1 onTap.
you can use pushReplacement in any cases you need to remove current page from stack and route to new page.
Replace the current route of the navigator that most tightly encloses
the given context by pushing the given route and then disposing the
previous route once the new route has finished animating in.
here is the documentation

Flutter back-pressed shows black screen

I have created NavigationDrawer in flutter before navigation drawer screen appear to user I have 3 screen before it
splash screen
intro slider
Login screen
NavigationDrawer
I want to close my app when user press back button in android phone from navigationdrawer screen but it will shows black screen.
I have called below called for navigation from login to drawer
Navigator.pushAndRemoveUntil(
context,
MaterialPageRoute(
builder: (BuildContext context) => NavigationDrawerDemo(),
),
ModalRoute.withName('/LoginFieldForm'));
I called loginfieldform with
Navigator.push(context,
new MaterialPageRoute(builder: (context) =>new LoginFieldForm()));
I think you have pushed the "LoginFieldForm" with the Navigator.push method and trying to remove it using the named routes.
For Ex :
// Puching a route with Navigator.push method
Navigator.push(
context,
MaterialPageRoute(builder: (context) => LoginFieldForm()),
);
// Removing using the named routes.
Navigator.pushAndRemoveUntil(
context,
MaterialPageRoute(
builder: (BuildContext context) => NavigationDrawerDemo(),
),
ModalRoute.withName('/LoginFieldForm'));
You can only use ModalRoute.withName() if you have added the route using named routes.
Your route probably has not a name set. If so, popping until the name is matched will result in popping everything, since the name you're looking for will never be found.
When you push LoginFieldForm ensure to pass a settings to the Route.
When pushing, you can do this:
MaterialPageRoute(
settings: RouteSettings(name: "routeName"),
builder: (context) => YourWidget(),
)
If you're within onGenerateRoute you already have settings passed as an argument to the onGenerateRoute function. In that case, just forward them to the MaterialPageRoute:
MaterialPageRoute(
settings: settings, //these settings are arguments from the function
builder: (context) => YourWidget(),
)
To close the app you may use exit(0) of dart:io on back press.exit(0) help out to Exit the Dart VM process immediately with the given exit code.
This does not wait for any asynchronous operations to terminate. You may find more information about exit(0) here
Or
SystemChannels.platform.invokeMethod('SystemNavigator.pop');
For more detail you may check here
Use-case: pushNamedAndRemoveUntil
Navigator.of(context).pushNamedAndRemoveUntil('/LoginFieldForm',
(Route<dynamic> route) => false);