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.

Flutter: Sobreescribiendo un widget stateful

Tengo una situación en la que quiero crear múltiples StatefulWidgets de Flutter basados ​​en la misma clase de estado. El problema con el que me encuentro parece claro, el widget de estado necesita conocer las propiedades del padre que llama a createState. Tiene que haber una forma de lograr esto sin tener que copiar y pegar grandes cantidades de código.

Lo que tengo hasta ahora es una clase de estado que se ve así:

abstract class XxxState extends State {
TextEditingController textController; // instanciado por initState().
}

Para lograr lo que quiero, creo varios métodos abstractos que la subclase anulará para implementar su función. El problema ocurre cuando creo la clase que quiero instanciar, no sé cómo conectar el nuevo StatelessWidget a la clase de estado que anula la clase XxxState.

class YyyWidget extends StatefulWidget {
@override
_YyyState createState() => _YyyState();
}

class _YyyState extends XxxState {
/// En esta clase, widget.xxx apunta a StatefulWidget y no a YyyWidget
}

Cualquier referencia sobre cómo se debe hacer esto sería apreciada.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para crear múltiples StatefulWidgets de Flutter basados en la misma clase de estado, puedes definir una clase de estado abstracta con las propiedades y métodos que deseas compartir entre los widgets. Luego, puedes crear subclases de estado concretas que extiendan la clase de estado abstracta e implementen su funcionalidad específica.

    Para vincular la subclase de estado a la subclase de widget, puedes utilizar un parámetro tipo en la subclase de estado que especifique el tipo de subclase de widget. Este parámetro tipo puede utilizarse en el método createState() de la subclase de widget para devolver una instancia de la subclase de estado.

    Aquí tienes un ejemplo de implementación de este enfoque:

    abstract class SharedState<t extends="" statefulwidget=""> extends State<t> {
      TextEditingController textController;
    
      // Define aquí los métodos y propiedades compartidos
    }
    
    class WidgetA extends StatefulWidget {
      @override
      _WidgetAState createState() => _WidgetAState();
    }
    
    class _WidgetAState extends SharedState<widgeta> {
      // Implementa aquí los métodos y propiedades específicos
    }
    
    class WidgetB extends StatefulWidget {
      @override
      _WidgetBState createState() => _WidgetBState();
    }
    
    class _WidgetBState extends SharedState<widgetb> {
      // Implementa aquí los métodos y propiedades específicos
    }
    

    En este ejemplo, la clase abstracta SharedState define una propiedad textController que puede ser compartida entre las subclases de estado. Las subclases WidgetA y WidgetB extienden StatefulWidget y especifican sus respectivas subclases de estado con las clases _WidgetAState y _WidgetBState. Estas subclases extienden la clase abstracta SharedState con su funcionalidad específica.

    En las clases _WidgetAState y _WidgetBState, el parámetro tipo T se utiliza para vincular la subclase de estado a la subclase de widget. El método createState() de cada subclase de widget devuelve una instancia de su respectiva subclase de estado, con el parámetro tipo correcto especificado.

    Este enfoque te permite crear múltiples widgets con estado compartido y funcionalidad específica con una cantidad mínima de duplicación de código.

Comments are closed.