Получатель: нулевая ошибка при попытке сохранить форму с помощью globalKey - PullRequest
0 голосов
/ 02 июня 2019

Я следую этому https://medium.com/@c_innovative/simple-firebase-login-flow-in-flutter-6f44c2b5c58a учебнику, и у меня возникли некоторые проблемы с получением логина для работы. Я уже подключил свое приложение к firebase и включил аутентификацию по электронной почте и паролю на консоли firebase!

Я пытался ввести ключевой аргумент в поле TextForm, но пока не могу этого сделать.

class LoginPage extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return _LoginPageState();
  }
}

class _LoginPageState extends State<LoginPage> {
  final _formKey = GlobalKey<FormState>();
  String _email;
  String _password;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text("Login Page Flutter Firebase"),
        ),
        body: Container(
          padding: EdgeInsets.all(20.0),
          child: Column(
            children: <Widget>[
              Spacer(flex: 5),
              Text(
                "Login  Information",
                style: new TextStyle(fontSize: 30.0),
              ),
              Spacer(
                flex: 5,
              ),
              TextFormField(
                key: _formKey,
                onSaved: (value) => _email = value,
                keyboardType: TextInputType.emailAddress,
                decoration: InputDecoration(labelText: "Email Address"),
              ),
              TextFormField(
                onSaved: (value) => _password = value,
                obscureText: true,
                decoration: InputDecoration(labelText: "Password"),
              ),
              Spacer(flex: 3),
              RaisedButton(
                  child: Text("Login"),
                  onPressed: () async {
                    //Getting the error here
                    final form = _formKey.currentState;
                    form.save();

                    if (form.validate()) {
                      print('$_email $_password');
                      var result = await 
                      Provider.of<AuthService(context).loginUser(email: _email, password:_password);
                      if (result == null) {
                        print("result is null");
                      }
                    }
                  }),
              Spacer(
                flex: 20,
              )
            ],
          ),
        ));
  }
}

[VERBOSE-2: ui_dart_state.cc (148)] Необработанное исключение: NoSuchMethodError: Метод 'save' был вызван для нуля. Получатель: ноль Пробный вызов: save ()

я получаю это сообщение об ошибке. почему-то я понимаю, что мне нужно инициализировать объект-получатель (?), но я не совсем понимаю, как это сделать. Спасибо за помощь!

Ответы [ 2 ]

1 голос
/ 02 июня 2019

вы ставите _formKey на TextFormField, связанное с полем электронной почты, оно там не принадлежит

 body: Container(
            padding: EdgeInsets.all(20.0),
            child: Form(
                key: _formKey,
                child: Column(children: <Widget>[
                  ....
                 ]
            ) // Form
         ) // Container

Из сообщения в блоге .. enter image description here

0 голосов
/ 02 июня 2019

Вместо использования onSaved я бы просто использовал TextEditingControllers в ваших полях и получал значения текста из них при вызове вашей функции входа в систему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...