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
.
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'), ), ), ); } }
Ingeniero en Informática, me encanta crear cosas o arreglarlas y darles una nueva vida. Escritor y poeta. Más de 20 APPs publicadas y un libro en Amazon.