I was using Navigator 1 then I migrated to go_router to support deep links and web.
Sometimes when I send HTTP requests, I show a loading dialog using showDialog()
until the response is processed, after processing I need to check if a dialog is shown or not, if shown I dismiss it using Navigator.of(context).pop()
.
When I was using Navigator 1, I used to do that in this way:
if (ModalRoute.of(context)?.isCurrent == false) Navigator.of(context).pop();
But now after migrating to go_router
this doesn’t work as I found that ModalRoute.of(context)
always equals to null
whether there is a dialog shown or not.
I tried using if (Navigator.of(context).canPop()) Navigator.of(context).pop();
, but this doesn’t differentiate between dialogs and screens, if there is no dialog shown it pops the current screen.
2
Answers
You can do this by checking the
location
ofGoRouter
Assuming your dialog route has path
/dialog
I just use context.pop() on dialog dismiss.
Previously did it this way, but tends to throw.
Set a Global variable:
In GoRouter specify:
Pop dialog the ‘old’ way with:
Correct me if it gives issues please.