Los argumentos son información que se quiere pasar de una pantalla a otra, como el usuario de un login, información de un producto, etc.
Existen dos maneras de pasar argumentos de una página a otra. Una es mediante el método pushNamed() del Navigator y el otro es pasarlos directamente por el contructor de la clase del Widget, mediante el método onGenerateRoute() en el widget padre, en el main.dart
Forma #1
Se hace uso del paraámetro con nombre arguments, del navigator, que se incluye en en cualquiera de sus métodos para navegar.
- Por el lado que se quiere pasar se hace esto:
Navigator.pushNamed(context, 'details', arguments: movie);
(‘details’ es la página y movie es el objeto con los argumentos)
- Por el lado receptor se hace esto, (generalmente en el build() del widget para obtener un contexto):
_movie = ModalRoute.of(context).settings.arguments;
Forma #2
La principal característica es que la información se recibe en el constructor de la página, como si gueran argumentos de un objeto.
En lugar de utilizar la propiedad routes:{} para generar las rutas de la aplicación en el main.dart, se
utiliza la propiedad onGenerateRoute(), la cual genera una sola ruta y debe regresar un solo Widget, (a
diferencia de routes que es un mapa de Widgets). Sin embargo onGenerateRoute() incluye un objeto
RouteSettings, que contiene los arguments y el nombre de la pagina que se esta generando y por medio
de decisiones regresar la pagina correspondiente.
// Proporciona una función para manejar las rutas con nombre. Usa esta función para
// identificar la ruta con nombre que ha sido añadida con push, y crea la
// pantalla correcta.
onGenerateRoute: (settings) {
// Si haces push de la ruta PassArgumentsScreen
if (settings.name == PassArgumentsScreen.routeName) {
// Convierte los argumentos al tipo correcto: ScreenArguments.
final ScreenArguments args = settings.arguments;
// Entonces, extrae los datos requeridos de los argumentos
// y pasa los datos a la pantalla correcta.
return MaterialPageRoute(
builder: (context) {
return PassArgumentsScreen(
title: args.title,
message: args.message,
);
},
);
}
}
Notar que en este ejemplo ScreenArguments es un modelo programado por nosotros que contiene x información y PassArgumentsScreen es la pantalla a la que queremos navegar, la cuál contiene un constructor con 2 argumentos.
Comentarios
Publicar un comentario