繁体   English   中英

NoSuchMethodError:在 null 上调用了方法“验证”……flutter-Firebase

[英]NoSuchMethodError: The method 'validate' was called on null ...... flutter-Firebase

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

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: () {},
                      ),
                    ],
                  )
                ],
              )),
        ),
      ),
    );
  }
}

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

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

在此处输入图像描述

这是如何工作的 url

完整形式创建 url

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM