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 llamar una función en un widget padre desde un widget hijo | Flutter

Tengo un widget padre y un widget hijo. El widget padre tiene una función. Quiero llamar a esa función (myParentFunction) desde mi widget hijo. Este es el widget padre:

class ParentWidget extends StatelessWidget {

  void myParentFunction() {
    print("Esto es imprimir desde el padre");
  }

  @override
  Widget build(BuildContext context) {
    return Center(
      child: MyCustomButton(),
    );
  }
}

Este es el widget hijo:

class MyCustomButton extends StatelessWidget {

  void myChildFunction() {
    print("Esto es imprimir desde el hijo");
    // Aquí quiero llamar a myParentFunction()
  }

  @override
  Widget build(BuildContext context) {
    return ElevatedButton(
      child: Text('Presionar'),
      onPressed: () {
        myChildFunction();
      },
    );
  }
}

Aquí el resultado esperado es que al presionar el botón ‘Presionar’, quiero obtener la salida:

Esto es imprimir desde el hijo
Esto es imprimir desde el padre

¿Cómo puedo reescribir este código para obtener esa funcionalidad?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Puede utilizar el parámetro BuildContext del método build para acceder al método myParentFunction del widget padre desde el widget hijo.

    En el widget hijo, puede utilizar el parámetro BuildContext del método build para acceder al método myParentFunction del widget padre.

    class MyCustomButton extends StatelessWidget {
    
      void myChildFunction(BuildContext context) {
        print("This is print from child");
        //Here i want to call the myParentFunction()
        ParentWidget parentWidget = context.ancestorWidgetOfExactType(ParentWidget);
        parentWidget.myParentFunction();
      }
    
      @override
      Widget build(BuildContext context) {
        return ElevatedButton(
          child: Text('Press'),
          onPressed: () {
            myChildFunction(context);
          },
        );
      }
    }
    

    Ahora, cuando presione el botón “Press”, la salida será: This is print from child This is print from parent

Comments are closed.