shubham chhimpa
shubham chhimpa

Reputation: 263

flutter call a function after moving back to screen from another screen

How to call a function in flutter ,after moving back to a screen from another screen?

For Example:

Screen 1

function1(){
}

Screen2

function2(){
//Go back to screen 1 and then call function1()
}

Upvotes: 4

Views: 6184

Answers (3)

dmnk
dmnk

Reputation: 21

Imho the solutions provided here aren't valid solutions. If you use a routes Future it may be called multiple times and will even be called in case of a forward navigation.

Instead use a NavigatorObserver:

class AppNavigationObserver extends NavigatorObserver {
  @override
  void didPop(Route<dynamic> route, Route<dynamic>? previousRoute) {
    print("AppNavigationObserver: ${route.settings.name}");
    print("AppNavigationObserver: ${previousRoute?.settings.name}");
  }
}

You can then use it for example like this:

  MaterialApp(
    navigatorObservers: [
      AppNavigationObserver()
    ],
    onGenerateRoute: (RouteSettings settings) {
      return PageRouteBuilder(
        maintainState: true,
        settings: settings,
        transitionDuration: const Duration(milliseconds: 300),
        pageBuilder: (context, animation, secondaryAnimation) {
          // Your route builder according to settings
        },
      );
    },
  )

The important part is passing onGenerateRoute's settings paramter to the PageRouteBuilder settings. Otherwise settings.arguments and settings.name will be null in the didPop handler.

Upvotes: 0

Jay Mungara
Jay Mungara

Reputation: 7148

It's simple.

Navigator.push(context, MaterialPageRoute(builder: (context)=> SecondScreen())).then((_){
      // This method gets callback after your SecondScreen is popped from the stack or finished.
      function1();
    });

You should also refer the Flutter Navigation & Routing.

Upvotes: 4

shubham chhimpa
shubham chhimpa

Reputation: 263

Here is the solution!

Second Screen

Navigator.pop(context, [1]);

or, if you don't want to send back any data, you can only call

Navigator.pop(context);

First Screen

Navigator.push( context, MaterialPageRoute( builder: (context) => SecondScreen(), ), ).then((value) { //do something after resuming screen
 });

Upvotes: 1

Related Questions