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
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
/// En esta clase, widget.xxx apunta a StatefulWidget y no a YyyWidget
}
Cualquier referencia sobre cómo se debe hacer esto sería apreciada.
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:
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.