Cargar una función en Flutter cuándo regresas a una pantalla

Tiempo de lectura: 2 minutos

En Flutter, si deseas ejecutar una función cada vez que vuelves a una pantalla (por ejemplo, después de navegar a otra pantalla y regresar), puedes hacer uso de NavigatorObserver.

Barco en amanecer - Pexels

Crear una Clase Personalizada NavigatorObserver con el siguiente contenido:

       import 'package:flutter/material.dart';
    
       class MyNavigatorObserver extends NavigatorObserver {
         @override
         void didPop(Route<dynamic> route, Route<dynamic>? previousRoute) {
           super.didPop(route, previousRoute);
           // Puedes hacer algo aquí si es necesario, pero la lógica de la pantalla actual se maneja en la pantalla misma.
         }
       }

    Configura el Observador en tu MaterialApp Pasa el observador de navegación a MaterialApp en tu widget principal:

         import 'package:flutter/material.dart';
      
         void main() {
           runApp(MyApp());
         }
      
         class MyApp extends StatelessWidget {
           @override
           Widget build(BuildContext context) {
             return MaterialApp(
               navigatorObservers: [MyNavigatorObserver()],
               home: HomeScreen(),
             );
           }
         }

      Detecta el Retorno en la Pantalla Dentro de tu pantalla (HomeScreen en este caso), puedes usar ModalRoute para verificar si la pantalla actual es la que te interesa y luego ejecutar el código deseado cuando la pantalla se vuelva visible nuevamente.

           import 'package:flutter/material.dart';
        
           class HomeScreen extends StatefulWidget {
             @override
             _HomeScreenState createState() => _HomeScreenState();
           }
        
           class _HomeScreenState extends State<HomeScreen> {
             @override
             void initState() {
               super.initState();
               // Inicializa cualquier cosa que necesites aquí.
             }
        
             @override
             void didChangeDependencies() {
               super.didChangeDependencies();
               // Aquí, verifica si la pantalla es la que te interesa.
               final ModalRoute? modalRoute = ModalRoute.of(context);
               if (modalRoute?.isCurrent == true) {
                 // Aquí llamas a tu método cuando la pantalla es visible
                 _onScreenResumed();
               }
             }
        
             void _onScreenResumed() {
               print("La pantalla ha sido reanudada.");
               // Aquí colocas tu lógica que deseas ejecutar cuando la pantalla se hace visible.
             }
        
             @override
             Widget build(BuildContext context) {
               return Scaffold(
                 appBar: AppBar(title: Text('Home Screen')),
                 body: Center(
                   child: ElevatedButton(
                     onPressed: () {
                       Navigator.push(
                         context,
                         MaterialPageRoute(builder: (context) => AnotherScreen()),
                       );
                     },
                     child: Text('Ir a otra pantalla'),
                   ),
                 ),
               );
             }
           }
        
           class AnotherScreen extends StatelessWidget {
             @override
             Widget build(BuildContext context) {
               return Scaffold(
                 appBar: AppBar(title: Text('Otra Pantalla')),
                 body: Center(
                   child: ElevatedButton(
                     onPressed: () {
                       Navigator.pop(context);
                     },
                     child: Text('Regresar'),
                   ),
                 ),
               );
             }
           }

        Deja un comentario