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 definir variables en un widget sin estado en Flutter

Quiero pasar una variable desde un statelesswidget a un stateful widget. Pero cuando lo hago, tengo que quitar el ‘const’ del constructor de GameScreen. Lo cual no se recomienda en general y hará que el statelesswidget sea equivalente a un statefulwidget en términos de recursos del sistema (ya que será una variable y no un ‘const’). ¿Hay alguna otra forma en la que pueda hacerlo?

Código:

“`dart
class GameScreen extends StatelessWidget {
const GameScreen({Key? key}) : super(key: key);

final gameState = Get.find<SudokuGame>();

@override
Widget build(BuildContext context) {
return const Scaffold(
body: ExampleGameScreenUI(),//Quiero enviar gameState como parámetro a ExampleGameScreenUI
);
}
}
“`

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, hay otra manera de pasar una variable desde un StatelessWidget a un StatefulWidget sin eliminar la palabra clave “const” del constructor del StatefulWidget. Puede implementar una GlobalKey.

    Así es cómo puede hacerlo:

    En su StatefulWidget, defina una GlobalKey:

    class ExampleGameScreenState extends State<examplegamescreen> {
      final GlobalKey<scaffoldstate> scaffoldKey = GlobalKey<scaffoldstate>();
    ...
    

    Luego, en su GameScreen StatefulWidget, asigne su GlobalKey al ExampleGameScreenUI:

    class GameScreen extends StatelessWidget {
      const GameScreen({Key? key}) : super(key: key);
    
      final gameState = Get.find<SudokuGame>();  
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          key: ExampleGameScreen.scaffoldKey,
          body: ExampleGameScreen(gameState: gameState),
        );
      }
    }
    

    Finalmente, en su ExampleGameScreenUI, acceda a la variable gameState utilizando la GlobalKey:

    class ExampleGameScreenUI extends StatelessWidget {
      const ExampleGameScreenUI({Key? key}) : super(key: key);
    
      @override
      Widget build(BuildContext context) {
        final gameState = ExampleGameScreen.scaffoldKey.currentState!.widget.gameState;
    ...
    

    Al usar una GlobalKey, puede pasar su variable gameState sin eliminar la palabra clave “const” del constructor de su StatefulWidget.

Comments are closed.