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, Investigador, 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.