Unhandled Exception: NoSuchMethodError: The method 'validate' was called on null
Unhandled Exception: NoSuchMethodError: The method 'validate' was called on null
[错误:flutter/lib/ui/ui_dart_state.cc(157)] 未处理的异常:NoSuchMethodError:在 null 上调用了方法 'validate'。
E/flutter(6538):接收器:空
E/flutter(6538):尝试调用:验证()
E/flutter ( 6538): #0 Object.noSuchMethod (飞镖:core-patch/object_patch.飞镖: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')));
}
},
)
],
),
)
),
);
}
}
请交换表单密钥check it
new Form(
key: _formKey,
child:.....,
),
child: Form(
key: _formKey,
child: Column(
您需要在 Form 小部件而不是 Column 小部件中设置键。
检查一下:https://flutter.dev/docs/cookbook/forms/validation
[错误:flutter/lib/ui/ui_dart_state.cc(157)] 未处理的异常:NoSuchMethodError:在 null 上调用了方法 'validate'。 E/flutter(6538):接收器:空 E/flutter(6538):尝试调用:验证() E/flutter ( 6538): #0 Object.noSuchMethod (飞镖:core-patch/object_patch.飞镖: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')));
}
},
)
],
),
)
),
);
}
}
请交换表单密钥check it
new Form(
key: _formKey,
child:.....,
),
child: Form(
key: _formKey,
child: Column(
您需要在 Form 小部件而不是 Column 小部件中设置键。 检查一下:https://flutter.dev/docs/cookbook/forms/validation