es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo devolver datos desde una página en Flutter utilizando Navigator 2.0?

Estoy utilizando Flutter Navigator 2.0 en mi aplicación y estoy tratando de devolver algunos datos desde otra pantalla cuando se cierra. Aquí está el código para lo mismo:

Esto es lo que estoy utilizando para abrir/agregar una nueva página. Después de que el usuario haya realizado cambios en la página de edición de perfil, estoy tratando de actualizar los datos en la página existente (página de perfil).

appState.currentAction = PageAction(
  state: PageState.addPage,
  widget: EditProfile(currentUserId: currentUserId),
  page: Edit_Profile_PageConfig,
);

Después de realizar los cambios en la página de edición de perfil, esto es lo que estoy haciendo para cerrarla:

appState.currentAction = PageAction(state: PageState.pop);

Pero no estoy seguro de cómo puedo pasar los datos desde la página de edición de perfil de vuelta a la página de perfil. En el antiguo estilo de navegación, era bastante fácil tener una función “then”, como esta:

var callBack = await Navigator.push(
  context,
  MaterialPageRoute(
    builder: (BuildContext context) => EditProfile(),
  ),
);

Pero no estoy seguro de cómo lograr esto utilizando Navigator 2.0. He consultado estas dos referencias para desarrollar la navegación en la aplicación:

  1. Flutter Navigator 2.0
  2. Google Docs
Tags:  ,

Answer

  1. Avatar for davy.ai

    Para enviar datos desde una pantalla cerrada utilizando Flutter Navigator 2.0, puedes hacer uso de los parámetros RouteSettings y onPopPage.

    Primero, al navegar a la pantalla EditProfile, puedes pasar datos utilizando el parámetro arguments:

    appState.currentAction = PageAction(
      state: PageState.addPage,
      widget: EditProfile(currentUserId: currentUserId),
      page: Edit_Profile_PageConfig,
      arguments: someData, // Pasa tus datos aquí
    );
    

    Luego, en tu pantalla EditProfile, puedes acceder a estos datos utilizando la propiedad ModalRoute.of(context).settings.arguments:

    class EditProfile extends StatelessWidget {
      // ...
    
      @override
      Widget build(BuildContext context) {
        final someData = ModalRoute.of(context).settings.arguments;
    
        // ...
      }
    
      // ...
    }
    

    Finalmente, para enviar datos de regreso a la pantalla anterior al cerrarla, puedes utilizar el parámetro onPopPage en tu widget Navigator. Esta función se llamará cuando la pantalla más superior sea cerrada y puede ser utilizada para obtener cualquier dato que haya sido enviado de regreso:

    Navigator(
      // ...
    
      onPopPage: (route, result) {
        // Obtiene cualquier dato que haya sido enviado de regreso
        if (route.settings.name == EDIT_PROFILE_PAGE_NAME) {
          final updatedData = result as SomeDataType;
    
          // Hacer algo con los datos actualizados
          // ...
    
          return true;
        }
    
        return false;
      },
    
      // ...
    );
    

    En la función onPopPage, puedes verificar si la pantalla más superior que fue cerrada es tu pantalla EditProfile y, de ser así, obtener cualquier dato que haya sido enviado de regreso a través del parámetro result. Luego, puedes realizar las acciones necesarias con estos datos antes de devolver true para indicar que el cierre debe proceder.

Comments are closed.