Estoy tratando de imprimir el valor actual de mi TextField usando el estado actual de Globalkey como se muestra: GlobalkeyName.currentState.value cuando hago esto dentro de un widget Statefull no obtengo ningún problema, pero cuando trato de hacer lo mismo dentro de una showModalBottomSheet recibo un error El getter 'currentState' no está definido para la clase 'Key'. . P.S: Sé cómo usar TextEditingController No sugiera eso, Código fuente completo a continuación


import 'package:flutter/material.dart';

void main() => runApp(MyApp());

/// This Widget is the main application widget.
class MyApp extends StatelessWidget {
  static const String _title = 'Flutter Code Sample';

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: _title,
      home: Scaffold(
        appBar: AppBar(title: const Text(_title)),
        body: MyStatelessWidget(),
      ),
    );
  }
}

/// This is the stateless widget that the main application instantiates.
class MyStatelessWidget extends StatelessWidget {
  MyStatelessWidget({Key key}) : super(key: key);
    Key _coffeeformkey=GlobalKey<FormState>();
  Key _nametextfield=GlobalKey<FormFieldState>();
  Key _sugartextfield=GlobalKey<FormFieldState>();

  @override
  Widget build(BuildContext context) {
    return Center(
      child: RaisedButton(
        child: const Text('showModalBottomSheet'),
        onPressed: () {
          showModalBottomSheet<void>(
            context: context,
            builder: (BuildContext context) {
              return Container(
              child: Form(
                key: _coffeeformkey,
                child: Center(
                  heightFactor: 2,
                  child: Column(
                    mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                    // crossAxisAlignment: CrossAxisAlignment.center,
                    mainAxisSize: MainAxisSize.max,

                    children: [
                      //Text("${brews.documents}"),
                      FractionallySizedBox(
                        widthFactor: 0.7,
                        child: TextFormField(
                          key: _nametextfield,
                         // initialValue: usertoselect1.data['name'],
                          //controller: namecontroller,
                          decoration: InputDecoration(hintText: "Enter Email"),
                        ),
                      ),
                      SizedBox(
                        height: 30,
                      ),
                      FractionallySizedBox(
                        widthFactor: .7,
                        child: TextFormField(
                          key: _sugartextfield,
                          //controller: sugarcontroller,
                          //initialValue:await usertoselect1.data['sugar'],
                          decoration: InputDecoration(hintText: "Enter Password"),

                        ),
                      ),
                      SizedBox(
                        height: 30,
                      ),

                      RaisedButton(
                        onPressed:(){
                          //final DatabaseService _database= DatabaseService();
                          print("yyfdyyyyyyyyyyyyyy");
                          print(_sugartextfield.currentState.value);
                          //print(_sugartextfield.r);

                          //print(_sugartextfield.runtimeType);
                           //_database.updateUser(_nametextfield.currentState.value, sugarcontroller.text, 400);
                        },
                        child: Text("Update"),
                        color: Colors.brown,
                      )
                    ],
                  ),
                ),
              ),
            );
            },
          );
        },
      ),
    );
  }
}
0
rushikesh chaskar 7 may. 2020 a las 02:03

2 respuestas

La mejor respuesta

Solucione el error cambiando la declaración de su clave al siguiente código:

// use a global key instead
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();

NOTA: La diferencia entre un Key y GloablKey se explica a continuación:

CLAVE

Una clave es un identificador para widgets, elementos y nodos semánticos.

CLAVE GLOBAL

Una clave que es única en toda la aplicación.

Para leer más sobre las claves, consulte el siguiente enlace:

Claves en aleteo

1
T.T Sage 6 may. 2020 a las 23:25

Bueno, aparentemente declarando la clave así:

final GlobalKey<FormState> _formKey = GlobalKey<FormState>();

En lugar de esto me funcionó:

Key _sugartextfield=GlobalKey<FormFieldState>();
0
rushikesh127001 6 may. 2020 a las 23:13