未处理的异常:NoSuchMethodError:在null上调用了方法'validate'

时间:2020-07-09 06:41:26

标签: flutter key flutter-layout requiredfieldvalidator textformfield

[ERROR:flutter / lib / ui / ui_dart_state.cc(157)]未处理的异常:NoSuchMethodError:方法“ validate”在null上被调用。 E / flutter(6538):接收者:null E / flutter(6538):尝试调用:validate() E / flutter(6538):#0 Object.noSuchMethod(dart:core-patch / object_patch.dart:53:5) E / flutter(6538):#1 _RegisterState.build。 (软件包:firebasestarter / screens / authenticate / Register.dart:85:47)

import 'package:firebasestarter/screens/authenticate/sign_in.dart';
    import 'package:firebasestarter/services/auth.dart';
import 'package:flutter/material.dart';

class Register extends StatefulWidget {
  final Function toggleView;

  Register({this.toggleView});

  @override
  _RegisterState createState() => _RegisterState();
}

class _RegisterState extends State<Register> {
  final AuthService _auth = AuthService();
  final _formKey = GlobalKey<FormState>();
 // final formKey = new GlobalKey();
  //text field state
  String email = '';
  String pass = '';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.brown[100],
      appBar: AppBar(
        backgroundColor: Colors.brown[400],
        elevation: 1,
        title: Text("Sign up to Brew Crew"),
        actions: <Widget>[
          FlatButton.icon(
            icon: Icon(Icons.person),
            label: Text("Sign-In"),
            onPressed: () {
              widget.toggleView();
            },
          )
        ],
      ),
      body: Container(
          padding: EdgeInsets.symmetric(vertical: 20, horizontal: 50),
          child: Form(
            child: Column(
              key: _formKey,
              children: <Widget>[
                SizedBox(
                  height: 20,
                ),
                TextFormField(
                  validator: (value) {
                    if (value.isEmpty) {
                      return 'Please enter some text';
                    }
                    return null;
                  },
                  onChanged: (val) {
                    setState(() => pass = val);
                  },
                ),
                SizedBox(
                  height: 20,
                ),
                TextFormField(
                  validator: (value) {
                    if (value.length<6) {
                      return 'longer pass pls';
                    }
                    return null;
                  },
                  obscureText: true,
                  onChanged: (val) {
                    setState(() => email = val);
                  },
                ),
                SizedBox(
                  height: 20,
                ),
                RaisedButton(
                  color: Colors.pink[400],
                  child: Text(
                    "Sign up",
                    style: TextStyle(color: Colors.white),
                  ),
                  onPressed: () async {
                    if (_formKey.currentState.validate()) {
                      // If the form is valid, display a Snackbar.
                      Scaffold.of(context)
                          .showSnackBar(SnackBar(content: Text('Processing Data')));
                    }
                  },
                )
              ],
            ),
          )
         
          ),
    );
  }
}

2 个答案:

答案 0 :(得分:1)

请交换表单密钥check it

new Form(
key: _formKey,
child:.....,
),

official site

答案 1 :(得分:0)

child: Form(
        key: _formKey,
        child: Column(

您需要在Form小部件而不是Column小部件中设置键。 签出:https://flutter.dev/docs/cookbook/forms/validation