NoSuchMethodError:在 null 上调用了方法“validate”...... flutter-Firebase

时间:2021-06-01 17:42:29

标签: firebase flutter

你好,我是 Flutter 的初学者,这里是问题所在——我试图构建一个带有验证和“注册”按钮的注册表单,该按钮必须显示数据是否有效,但存在“NoSuchMethodError: The method 'validate'当我按下这个“注册”按钮时,在调试器中被调用为空。代码如下:

import 'package:flutter/material.dart';
import 'package:flutter_auth/Screens/Login/login_screen.dart';
import 'package:flutter_auth/Screens/Signup/components/background.dart';
import 'package:flutter_auth/Screens/Signup/components/or_divider.dart';
import 'package:flutter_auth/Screens/Signup/components/social_icon.dart';
import 'package:flutter_auth/Screens/Signup/signup_screen.dart';
import 'package:flutter_auth/components/already_have_an_account_acheck.dart';
import 'package:flutter_auth/components/rounded_button.dart';
import 'package:flutter_auth/components/rounded_input_field.dart';
import 'package:flutter_auth/components/rounded_password_field.dart';
import 'package:flutter_svg/svg.dart';
import 'package:firebase_auth/firebase_auth.dart';

class Body extends StatefulWidget {
  Body({Key key}) : super(key: key);
  @override
  _BodyState createState() => _BodyState();
}

class _BodyState extends State<Body> {
  var myemail, mypassword;
  GlobalKey<FormState> formstate = new GlobalKey<FormState>();
  body() async {
    var formdata = formstate.currentState;
    if (formdata.validate()) {
      print("============================================");
      print("valid");
    } else {
      print("============================================");
      print("not valid");
    }
  }

  @override
  Widget build(BuildContext context) {
    Size size = MediaQuery.of(context).size;
    return Background(
      child: SingleChildScrollView(
        child: Container(
          alignment: Alignment.center,
          child: Form(
              key: formstate,
              child: Column(
                children: [
                  Text(
                    "SIGNUP",
                    style: TextStyle(fontWeight: FontWeight.bold),
                  ),
                  SizedBox(height: size.height * 0.03),
                  SvgPicture.asset(
                    "assets/icons/signup.svg",
                    height: size.height * 0.35,
                  ),
                  RoundedInputField(
                    /*********************************email************************/
                    hintText: "Your Email",
                    onChanged: (value) {
                      myemail = value;
                      if (value.length > 100) {
                        return "email can't be larger than 100 letter";
                      }
                      if (value.length < 2) {
                        return "email can't be less than 2 letter";
                      }
                      return null;
                    },
                  ),
                  RoundedPasswordField(
                    /*********************************password************************/
                    onChanged: (value) {
                      mypassword = value;
                      if (value.length > 100) {
                        return "password can't be larger than 100 letter";
                      }
                      if (value.length < 4) {
                        return "Password can't be less than 4 letter";
                      }
                      return null;
                    },
                  ),
                  RoundedButton(
                    /*********************************Button************************/
                    text: "SIGNUP",
                    press: () async {
                      print("there is the prooooooooob");
                      return await body();
                    },
                  ),
                  SizedBox(height: size.height * 0.03),
                  AlreadyHaveAnAccountCheck(
                    login: false,
                    press: () {
                      Navigator.push(
                        context,
                        MaterialPageRoute(
                          builder: (context) {
                            return LoginScreen();
                          },
                        ),
                      );
                    },
                  ),
                  OrDivider(),
                  Row(
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: <Widget>[
                      SocalIcon(
                        iconSrc: "assets/icons/facebook.svg",
                        press: () {},
                      ),
                      SocalIcon(
                        iconSrc: "assets/icons/twitter.svg",
                        press: () {},
                      ),
                      SocalIcon(
                        iconSrc: "assets/icons/google-plus.svg",
                        press: () {},
                      ),
                    ],
                  )
                ],
              )),
        ),
      ),
    );
  }
}

2 个答案:

答案 0 :(得分:0)

您的输入字段中没有任何 validator

validate() 背后的主要思想是,它从 validator 的成员字段中调用所有 Form,键为 formstate(在您的情况下)。

enter image description here

How does this work url

Full form creating url

答案 1 :(得分:0)

我是同样的问题,但解决了,因为我声明变量错误。确保正确声明变量。

final _formKey = GlobalKey<FormState>(); //Correct
final GlobalKey _formKey = GlobalKey<FormState>(); //Wrong
GlobalKey _formKey = GlobalKey<FormState>(); //wrong