Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter _断言错误(';包:firebase_auth/src/firebase_auth.dart';:失败的断言:第95行位置12:';email!=null';:不正确。)_Flutter_Dart - Fatal编程技术网

Flutter _断言错误(';包:firebase_auth/src/firebase_auth.dart';:失败的断言:第95行位置12:';email!=null';:不正确。)

Flutter _断言错误(';包:firebase_auth/src/firebase_auth.dart';:失败的断言:第95行位置12:';email!=null';:不正确。),flutter,dart,Flutter,Dart,我的目标是在Firebase中注册Flitter。但是,当我按下包含注册功能的按钮时,应用程序停止,我收到以下错误: 发生异常。 _AssertionError('package:firebase\u auth/src/firebase\u auth.dart':失败的断言:第95行位置12:'email!=null':不正确。) 与firebase的集成正在运行,问题可能是textformfield没有获取数据 import'包:cloud_firestore/cloud_firestore.

我的目标是在Firebase中注册Flitter。但是,当我按下包含注册功能的按钮时,应用程序停止,我收到以下错误:

发生异常。 _AssertionError('package:firebase\u auth/src/firebase\u auth.dart':失败的断言:第95行位置12:'email!=null':不正确。)

与firebase的集成正在运行,问题可能是textformfield没有获取数据

import'包:cloud_firestore/cloud_firestore.dart';
导入“包:firebase_auth/firebase_auth.dart”;
进口“包装:颤振/材料.省道”;
导入“package:cruke_app/main.dart”;
导入“package:cruke_app/ui/login.dart”;
类CrukerRegister扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
主:寄存器(),
);
}
}
类寄存器扩展StatefulWidget{
@凌驾
_RegisterState createState();
}
类_RegisterState扩展状态{
字符串\u email、\u password、\u passwordConfirm、\u displayName;
final formKey=new GlobalKey();
bool _autoValidate=false;
final FirebaseAuth auth=FirebaseAuth.instance;
bool\u加载=假;
最终脚手架键=新的GlobalKey();
@凌驾
void initState(){
super.initState();
} 
Widget buildTextField(双宽度、字符串文本、图标数据图标、布尔模糊文本、字符串为空、字符串已保存、布尔自动验证){
返回容器(
页边距:仅限边集(底部:15),
宽度:宽度*0.9,
子项:TextFormField(
验证程序:(输入)=>input.isEmpty?isEmpty:null,
onSaved:(输入)=>\u saved=输入,
自动验证:_自动验证,
蒙蔽文本:蒙蔽文本,
装饰:输入装饰(
副词:填充(
填充:仅边缘方向(末端:12.0),
子:图标(图标,颜色:Colors.red),
), 
hintText:text,
hintStyle:TextStyle(颜色:Colors.redAccent,fontSize:15.0),
边框:大纲输入边框(
边界半径:边界半径。圆形(30.0),
边界边(
宽度:5.0,
颜色:Colors.redAccent,
),
), 
),
),
);
}
@凌驾
小部件构建(构建上下文){
double width=MediaQuery.of(context).size.width;
double height=MediaQuery.of(context).size.height;
返回脚手架(
钥匙:脚手架钥匙,
背景颜色:Colors.white,
正文:SingleChildScrollView(
子:列(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
居中(
子:容器(
边距:仅限边缘组(顶部:高度*0.025),
子项:Image.asset(“images/logo_vertical.png”,宽度:width*0.5),
),
),
形式(
key:formKey,
自动验证:_自动验证,
子:列(
儿童:[
buildTextField(宽度,“Digite seu nome”,Icons.person,false,“Por favor,Digite seu nome!”,\u displayName,\u autoValidate),
buildTextField(宽度,“Digite seu电子邮件”,Icons.email,false,“Por-favor,Digite seu电子邮件!”,\u-email,\u-autoValidate),
buildTextField(宽度,“Digite sua senha”,Icons.lock,true,“Por favor,Digite sua senha!”,_password,_autoValidate),
buildTextField(宽度,“confirm sua senha”,Icons.lock,true,“Por-favor,confirm sua senha!”,_-passwordConfirm,_-autoValidate),
容器(
高度:高度*0.09,
宽度:宽度*0.9,
填充:仅限边缘设置(顶部:10.0),
子:升起按钮。图标(
按下按钮:
_验证SubmitRegister,
//导航器。推(
//背景,
//MaterialPage路由(生成器:(上下文)=>Home()),
//);
标签:文本(
“注册官”,
样式:TextStyle(字体大小:15,颜色:Colors.white),
),
颜色:颜色,红色,
图标:图标(Icons.account\u圆圈,颜色:Colors.white),
形状:RoundedRectangleBorder(borderRadius:borderRadius.circular(30.0)),
),
),
],
),
),
容器(
页边距:仅限边缘集(顶部:15),
儿童:材料(
孩子:InkWell(
onTap:(){
push(context,MaterialPageRoute(builder:(context)=>CrukeLogin());
},
孩子:文本(“Játem uma conta?Faça Login!”,样式:TextStyle(字体大小:15,颜色:Colors.red)),
),
),
),
],
),
),
);
}
void _validateSubmitRegister()异步{
最终形式=formKey.currentState;
if(formKey.currentState.validate()){
form.save();
AuthResult result=等待FirebaseAuth.instance.createUserWithEmailAndPassword(电子邮件:\电子邮件,密码:\密码);
FirebaseUser=result.user;
}
}
}
您可以尝试以下方法:

创建枚举:
enum数据类型{NAME,EMAIL,PASS,PASS\u REPEAT}

并更改您的方法:

Widget buildTextField(double width, String text, IconData icon, bool obscureText, String isEmpty, DataType type, bool _autoValidate){

  return Container(
    margin: EdgeInsets.only(bottom: 15),
    width: width * 0.9,
    child: TextFormField(
      validator: (input) => input.isEmpty ? isEmpty : null,
      onSaved: (input) {
        switch (type) {
          case DataType.NAME:
            _displayName = input;
            break;
          case DataType.EMAIL:
            _email = input;
            break;
          case DataType.PASS:
            _password = input;
            break;
          case DataType.PASS_REPEAT:
            _passwordConfirm = input;
            break;
        }
      },
      autovalidate: _autoValidate,
      obscureText: obscureText,
      decoration: InputDecoration(
        suffixIcon: Padding(
          padding: EdgeInsetsDirectional.only(end: 12.0),
          child: Icon(icon, color: Colors.red),
        ), 
        hintText: text,
        hintStyle: TextStyle(color: Colors.redAccent, fontSize: 15.0),
        border: OutlineInputBorder(
          borderRadius: BorderRadius.circular(30.0),
          borderSide: BorderSide(
            width: 5.0,
            color: Colors.redAccent,
          ),
        ), 
      ),
    ),
  );
}

我怀疑当你调用
buildTextField(width,“Digite seu e-mail”,Icons.email,false,“Por favor,Digite seu e-mail!”,\u email,\u autoValidate)
时,它会完全改变你的
\u email
字段。我认为它创建了字符串的副本,所以
\u email
保持
null
我听从了你的建议,工作得非常好